Sql server 返回一个“sum(DATALENGTH)”;算术溢出“;错误

Sql server 返回一个“sum(DATALENGTH)”;算术溢出“;错误,sql-server,function,tsql,sum,Sql Server,Function,Tsql,Sum,我是SQL Server新手,如果我的问题太简单,请接受我的道歉。我试图找到一个解决方案,但到目前为止,我看不到任何可以在我的查询中使用的东西 我尝试查找表中最大列的长度,并使用以下查询 SELECT SUM(DATALENGTH([INSDetails])) as [INSDetails] FROM dbo.Contractors 表Contractors略高于8GB,行数超过30mlnINSDetails列为varchar(2048) 上面的查询对于数据库中所有其他表的所

我是SQL Server新手,如果我的问题太简单,请接受我的道歉。我试图找到一个解决方案,但到目前为止,我看不到任何可以在我的查询中使用的东西

我尝试查找表中最大列的长度,并使用以下查询

SELECT
    SUM(DATALENGTH([INSDetails])) as [INSDetails]
FROM 
    dbo.Contractors
Contractors
略高于8GB,行数超过30mln<代码>INSDetails列为
varchar(2048)

上面的查询对于数据库中所有其他表的所有其他列都非常有效,但是当我在
Contractors
表上运行它时,它返回一个错误

Msg 8115,16级,状态2,第26行
将表达式转换为数据类型int时出现算术溢出错误

我知道,当您尝试将某个数据类型的值转换为另一个数据类型时,会出现此错误消息,但该值对于第二个数据类型来说太大

你能帮我重写这个查询吗?或者建议另一种获取输出的方法

我读到有人建议使用CAST-AS-big-int来解决这个问题,但我不确定如何将它合并到我的查询中


如有任何建议,将不胜感激。提前感谢。

该错误是因为该值太大,无法放入整数。除非数据类型是max数据类型,否则DATALENGTH将返回整数。然后,当你把它放在总和中时,它会强制总和返回一个整数。为什么你关心3000万行中总共有多少个字符?谢谢@SeanLange我需要总字符数,因为管理层决定压缩一些列,他们要求我提供总数。请参阅我的答案。不足为奇。您正在将varchar转换为bigint。
select sum(cast(datalength([INSDetails]) as bigint))