MAX(文本)返回操作数数据类型文本对于max运算符无效。在sql server 2008中

时间:2011-11-15 05:27:21

标签: sql-server-2008 aggregate-functions sqldatatypes

我在其中一个表格中使用text数据类型,我也在查询中使用PIVOT。 我无法使用MAX(AttributeValue),其中AttributeValuetext的类型。它返回以下错误Operand data type text is invalid for max operator.。我如何在此处使用它,因为我被强制使用aggregate函数与PIVOT

编辑: 我关注了帖子http://msdn.microsoft.com/en-us/library/ms187993.aspx

我尝试将数据类型转换为nvarchar(max)

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

此外,我也必须使用Full Text Search选项。我收到以下错误 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

'AttributeValue'属于'text'数据类型。我收到以下错误,

操作数数据类型文本对于max运算符无效。

好吧,我试着将字段强制转换为nvarchar(max)。它给出了另一种类型的错误(在第四行)。

Incorrect syntax near '('

我错过了什么吗?

3 个答案:

答案 0 :(得分:10)

您可以将文本列强制转换为varchar(max)。

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

您可以在子查询中转换数据。

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

答案 1 :(得分:2)

如果我记得的是正确的,SQL Server中的文本不会让你运行很多命令。我遇到的唯一(一半)解决方案是将文本转换为不同的数据类型;不幸的是,这可能意味着编写一些代码,并且只处理部分实际存储的文本数据。

另外,正在从SQL Server的未来版本中删除文本: http://msdn.microsoft.com/en-us/library/ms187993.aspx

因此,只需将列数据类型更改为NVarChar(Max),并希望查询能够正常运行。

答案 2 :(得分:0)

您还可以在MAX()中使用DATALENGTH(),以避免输出可能非常大的字符串。

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