每个表的字节大小(以字节为单位)SQL

时间:2014-07-18 08:52:25

标签: sql sql-server size byte ssms

我被要求解决: "每个表的字节总大小(以一个记录为单位)。不要包含NVARCHAR(Max)字段,而是为该表提供多个VARCHAR(max)字段。"

不是最好的描述,但它是我必须要做的工作。

基本上,有没有办法找到表格的每个字段的大小?

3 个答案:

答案 0 :(得分:0)

您应该考虑检查INFORMATION_SCHEMA.COLUMNS和/或INFORMATION_SCHEMA.COLUMNS。不知道大小是以字节为单位写的,但这可以帮到你!

答案 1 :(得分:0)

你可以这样做。我不知道内置的方式,我找不到。

SELECT SUM(CASE DATA_TYPE
           WHEN 'numeric' THEN (CASE WHEN NUMERIC_PRECISION <= 9 THEN 5
                                     WHEN NUMERIC_PRECISION <= 19 THEN 9
                                     WHEN NUMERIC_PRECISION <= 28 THEN 13
                                     ELSE 17 END)
           WHEN 'int' THEN 4
           WHEN 'bigint' THEN 8
           ... --whatever other datatypes you want to handle, like tinyint, datetime, etc.
           ELSE 0 END)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @tableName

我通过文档获得了这些数字。我非常确定每种类型都以字节为单位列出大小,所以如果你找不到更好的东西,至少应该能够做到这一点。至少SQL中没有多种类型...

我知道规范告诉你要忽略NVARCHAR(MAX),但如果你想要,你甚至可以给另一列显示行的最大大小,或者甚至只是偏移表示最大值,使用CHARACTER_MAXIMUM_LENGTH列。

答案 2 :(得分:0)

SELECT  o.name TABLE_name, c.name colimn_name, c.max_length, t.name type
FROM sys.columns c
JOIN sys.objects o ON c.object_id=o.object_id AND o.type='U'
JOIN sys.types t ON c.system_type_id=t.system_type_id

长度-1表示最大

已修改为包含数据类型