【问题标题】:MAX(text) returns Operand data type text is invalid for max operator. in sql server 2008MAX(text) 返回操作数数据类型 text 对于 max 运算符无效。在 sql server 2008 中
【发布时间】:2011-12-29 05:38:08
【问题描述】:

我在我的一张表中使用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”属于“文本”数据类型。我收到以下错误,

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

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

Incorrect syntax near '('

我错过了什么吗?

【问题讨论】:

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


    【解决方案1】:

    您还可以在 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
    

    【讨论】:

      【解决方案2】:

      您可以将文本列转换为 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
      

      【讨论】:

        【解决方案3】:

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

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

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

        【讨论】:

          猜你喜欢
          • 2017-03-11
          • 2020-12-19
          • 1970-01-01
          • 1970-01-01
          • 2016-01-06
          • 1970-01-01
          • 2013-06-02
          • 2018-07-23
          • 1970-01-01
          相关资源
          最近更新 更多