1

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

4

2 回答 2

1

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

于 2009-03-24T10:12:23.623 回答
0

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

于 2009-03-24T10:15:37.280 回答