如果t-sql中的类型是固定长度的,如何找出(运行时)?

时间:2009-03-24 10:06:14

标签: sql sql-server tsql dynamic-sql

如果类型(例如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而言

2 个答案:

答案 0 :(得分:1)

您可以查看information_schema.columns。如果字符类型列具有最大长度,则将在character_maximum_length中指定,数字字段的精度在numeric_precision中定义。一些注意事项,据我所知,int类型总是4个字节,同样,任何var类型根据定义都不是固定长度,只有存储到它们的最大长度,如果nvarchar(10)保持2字符串,它只存储2个字符。因此,要检测固定长度的字符串,您将寻找char或nchar类型。

答案 1 :(得分:0)

是的,这是可能的。查看内置存储过程sp_columns的代码,了解如何执行此操作。