此处的查询将确定哪些表具有潜在的危险,并且可能的最大行大小将超过可用的8060字节:
;WITH TableRowSizes AS( SELECt t.NAME 'TableName', COUNT(1) 'NumberOfColumns', SUM (c.max_length) 'MaxRowLength' FROMsys.columns c INNER JOIN sys.tables t ON c.object_id = t.object_id WHERe c.user_type_id NOT IN (98, 165, 167, 231) -- sql_variant, varbinary, varchar, nvarchar GROUP BY t.name)SELECt *FROM TableRowSizesWHERe MaxRowLength > 8060ORDER BY MaxRowLength DESC
这并不意味着您的行 实际上使用 了8060多个字节-只是汇总了每一列的最大可能大小。
如果您想确定当前实际使用的大小,则可以通过检查
DATALENGTH(colname)函数来执行类似的 *** 作(而不是使用中的理论最大值
sys.columns)
更新: 基于gbn的响应在我的CTE SELECT中添加了WHERe子句-不应使用这些类型来确定行是否可能超出8060字节大小限制。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)