是否有可能使用T-SQL找出运行时如果一个类型(例如为nvarchar或INT)是固定长度或不通过查询一些系统表?

我需要这样做的原因是,我需要生成SQL的代码的运行时,需要生成取决于一些列(属于在设计时未知的)的类型的一些声明(DECLARE @foo SOMETYPE(LENGTH)DECLARE @foo SOMETYPE)。

我的当前的选择是,我可以检查是否sys.all_columns.max_length = sys.types.max_length并且如果是这样假定它是固定长度的(因为max_length似乎有一个特殊的代码(-1),至少对于nvarchar的)。

有帮助吗?

解决方案

您可以看一下INFORMATION_SCHEMA.COLUMNS。如果键入的字符列有将在CHARACTER_MAXIMUM_LENGTH指定一个最大长度,数字字段在NUMERIC_PRECISION定义他们的精度。一对夫妇的笔记,给我所知,int类型始终是4个字节,另外,任何变种类型被定义不固定长度,最多只能保存到他们的最大长度,如果为nvarchar(10)持有2字符串,它只存储2个字符。因此,检测固定长度的字符串,你要寻找的char或NCHAR类型。

其他提示

是,这是可能的。看看在存储过程SP_COLUMNS内置的代码,看看如何做到这一点。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top