为什么不能在文本上使用 COUNT() 方法?



虽然这里和这里已经介绍了这个问题的解决方法,但为什么你实际上不能在文本数据类型上使用 COUNT()?是技术限制吗?有谁知道是什么内部机制推动了这一点?

要回答您的实际问题:

旧的大幅面/LOB 数据类型:TEXT、NTEXT 和 IMAGE,是过时的数据类型,具有许多技术限制(例如,您不能直接在其中一个上使用 UPDATE)。

Microsoft SQL Server 2005版本中修复了此问题,但为了保持与先前版本的兼容性,使用三种数据类型进行了修复:VARCHAR(MAX),NVARCHAR(MAX)和VARBINARY(MAX)。 您应该改用这些数据类型,它们几乎在各个方面都更好。

我猜你已经想出了一个解决方案,但对于其他寻找答案的人来说,这将起作用。case 语句为找到非 Null 或空字符串的每一行返回 1,为空或 Null 的每一行返回 0。它适用于字符和数字字段。外面的 Sum() 函数有效地返回计数:

select sum(
     case when YourField >'' then 1
     else 0
     end
) 'mycount'
from YourTable

最新更新