Как выяснить (во время выполнения), является ли тип в t-sql фиксированной длины или нет? - PullRequest
1 голос
/ 24 марта 2009

Можно ли определить время выполнения с помощью 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).

Ответы [ 2 ]

1 голос
/ 24 марта 2009

Вы можете посмотреть на information_schema.columns. Если столбец с символьным типом имеет максимальную длину, он будет указан в character_maximum_length, числовые поля имеют точность, определенную в numeric_precision. Пара замечаний: насколько мне известно, тип int всегда 4 байта, а также, что любой из типов var по определению не имеет фиксированной длины, и сохраняет его до максимальной длины, только если nvarchar (10) содержит символьная строка, она хранит только 2 символа. Таким образом, чтобы обнаружить строки фиксированной длины, вы должны искать типы char или nchar.

0 голосов
/ 24 марта 2009

Да, это возможно. Посмотрите на код встроенного хранимого процесса sp_columns, чтобы увидеть, как это сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...