此处的查询将确定哪些表具有潜在的危险,并且可能的最大行大小将超过可用的8060字节:
;WITH TableRowSizes AS
(
SELECT
t.NAME 'TableName',
COUNT(1) 'NumberOfColumns',
SUM (c.max_length) 'MaxRowLength'
FROM
sys.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 TableRowSizes
WHERE MaxRowLength > 8060
ORDER BY MaxRowLength DESC
这并不意味着您的行 了8060多个字节-只是汇总了每一列的最大可能大小。
如果您想确定当前实际使用的大小,则可以通过检查DATALENGTH(colname)
函数来执行类似的操作(而不是使用中的理论最大值sys.columns
)
基于gbn的响应在我的CTE SELECT中添加了WHERE子句-不应使用这些类型来确定行是否可能超出8060字节大小限制。