如果类型(例如nvarchar或int)是固定长度的话,是否可以通过查询某个系统表来找出使用t-sql的运行时?
我需要这样做的原因是我需要生成sql-code运行时并需要生成一些声明(DECLARE @foo SOMETYPE(LENGTH)
或DECLARE @foo SOMETYPE
),具体取决于某些列的类型(未知)在设计时。)
我目前的赌注是,我可以检查是否sys.all_columns.max_length = sys.types.max_length
,如果是,则假设它是固定长度的(因为max_length
似乎有一个特殊代码(-1),至少对于nvarchar而言
答案 0 :(得分:1)
您可以查看information_schema.columns。如果字符类型列具有最大长度,则将在character_maximum_length中指定,数字字段的精度在numeric_precision中定义。一些注意事项,据我所知,int类型总是4个字节,同样,任何var类型根据定义都不是固定长度,只有存储到它们的最大长度,如果nvarchar(10)保持2字符串,它只存储2个字符。因此,要检测固定长度的字符串,您将寻找char或nchar类型。
答案 1 :(得分:0)
是的,这是可能的。查看内置存储过程sp_columns的代码,了解如何执行此操作。