2011-11-15 20 views
6

Utilizo el tipo de datos text en una de mis tablas y también uso PIVOT con la consulta también. No puedo usar MAX(AttributeValue) donde AttributeValue es el tipo de text. Devuelve el siguiente error Operand data type text is invalid for max operator.. ¿Cómo puedo usarlo aquí? Porque me impuso usar una función aggregate con PIVOT.MAX (text) returns El texto del tipo de datos de operando no es válido para el operador max. en el servidor sql 2008

Editar: que siguieron el puesto http://msdn.microsoft.com/en-us/library/ms187993.aspx

traté de convertir el tipo de datos a nvarchar(max).

ALTER TABLE dbo.MyTable 
ALTER COLUMN AttributeValue NVARCHAR(MAX) 

También tengo que usar Full Text Search opción también. Me sale el siguiente error Cannot alter or drop column 'AttributeValue' because it is enabled for Full-Text Search.

SELECT 
[6B93119B-263B-4FED-AA89-198D26A3A3C4] DOB 
,[F1A0D9D6-702E-4492-9EBC-63AD22E60E6A] CaseTitle 
FROM MyTable PIVOT 
( MAX(AttributeValue) 
    FOR AttributeID IN 
    (
     [6B93119B-263B-4FED-AA89-198D26A3A3C4] 
     ,[F1A0D9D6-702E-4492-9EBC-63AD22E60E6A] 
    ) 
) ResultTable 

Cuando el 'AttributeValue' es de 'texto' tipo de datos. Aparece el siguiente error,

El texto del tipo de datos del operando no es válido para el operador max.

Bueno, traté de convertir el campo a nvarchar (max). Da otro tipo de error (en la cuarta línea).

Incorrect syntax near '(' 

¿Echo de menos algo?

Respuesta

9

Puede convertir su columna de texto en varchar (max).

select max(cast(AttributeValue as varchar(max))) 
from YourTable 

Puede convertir sus datos en una consulta secundaria.

SELECT 
[6B93119B-263B-4FED-AA89-198D26A3A3C4] DOB 
,[F1A0D9D6-702E-4492-9EBC-63AD22E60E6A] CaseTitle 
FROM (SELECT AttributeID, 
       CAST(AttributeValue as VARCHAR(MAX)) as AttributeValue 
     FROM MyTable 
    ) AS T 
    PIVOT 
( MAX(AttributeValue) 
    FOR AttributeID IN 
    (
     [6B93119B-263B-4FED-AA89-198D26A3A3C4] 
     ,[F1A0D9D6-702E-4492-9EBC-63AD22E60E6A] 
    ) 
) ResultTable 
+0

Ver mi edición :(. Me aparece un error. – Rauf

2

Si lo que recuerdo es correcto, el texto en SQL Server no le permite ejecutar muchos comandos en su contra. La única (media) solución con la que me he encontrado es enviar texto a un tipo de datos diferente; desafortunadamente, esto puede significar escribir algún código, y solo tratar con los datos de texto almacenados reales en secciones.

Además, el texto está siendo retirado de las futuras versiones de SQL Server: http://msdn.microsoft.com/en-us/library/ms187993.aspx

lo tanto, sólo altera el tipo de la columna de nvarchar (max), y es de esperar la consulta se ejecute correctamente.

0

También puede utilizar DATALENGTH() dentro MAX() para evitar la proyección potencialmente muy grandes cadenas.

SELECT 
    6B93119B-263B-4FED-AA89-198D26A3A3C4] DOB 
,[F1A0D9D6-702E-4492-9EBC-63AD22E60E6A] CaseTitle 
FROM MyTable PIVOT 
( MAX(DATALENGTH(AttributeValue)) 
    FOR AttributeID IN 
    (
     [6B93119B-263B-4FED-AA89-198D26A3A3C4] 
     ,[F1A0D9D6-702E-4492-9EBC-63AD22E60E6A] 
    ) 
) ResultTable 
Cuestiones relacionadas