MAX(text) 返回操作数数据类型 text 对于 max 运算符无效。在 sql server 2008 中
Posted
技术标签:
【中文标题】MAX(text) 返回操作数数据类型 text 对于 max 运算符无效。在 sql server 2008 中【英文标题】:MAX(text) returns Operand data type text is invalid for max operator. in sql server 2008 【发布时间】:2011-12-29 05:38:08 【问题描述】:我在我的一张表中使用text
数据类型,并且我也在查询中使用PIVOT
。
我无法使用MAX(AttributeValue)
,其中AttributeValue
是text
的类型。它返回以下错误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 '('
我错过了什么吗?
【问题讨论】:
【参考方案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),希望查询能够正常运行。
【讨论】:
以上是关于MAX(text) 返回操作数数据类型 text 对于 max 运算符无效。在 sql server 2008 中的主要内容,如果未能解决你的问题,请参考以下文章
Sqlserver 报错“参数数据类型 ntext/text 对于 replace 函数的参数 1 无效”的解决方案及原理分析扩展
参数数据类型 text 对于 replace 函数的参数 1 无效