我被要求解决: "每个表的字节总大小(以一个记录为单位)。不要包含NVARCHAR(Max)字段,而是为该表提供多个VARCHAR(max)字段。"
不是最好的描述,但它是我必须要做的工作。
基本上,有没有办法找到表格的每个字段的大小?
答案 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表示最大
已修改为包含数据类型