Как я могу получить фактический тип столбца или переменной в t-sql?T-SQL: Является ли переменная NVARCHAR (MAX)?
Я знаю о SQL_VARIANT_PROPERTY
, но с треском проваливается для NVARCHAR(MAX)
:
DECLARE @foo1 NVARCHAR(10) = N'a'
SELECT SQL_VARIANT_PROPERTY(@foo1, 'BaseType') --works fine
DECLARE @foo2 NVARCHAR(MAX) = N'a'
SELECT SQL_VARIANT_PROPERTY(@foo2, 'BaseType') --fails with an error:
--Operand type clash: nvarchar(max) is incompatible with sql_variant
Есть ли что-нибудь еще, что может сказать мне, если переменная содержит значение типа NVARCHAR(MAX)
?
Некоторый фон:
Я работаю над процедурой, которая должна изменить порядок столбцов таблицы: Переименовать старую таблицу, создать новую, скопировать данные и падение старого. Чтобы сделать это, все индексы, представления, ограничения и т. Д. Необходимо воссоздать в новой таблице.
Я хочу, чтобы в этом автоматическом процессе ничего не терялось. Для этого я хотел бы скопировать большинство значений из соответствующих системных таблиц в общую временную таблицу и сравнить значения после переупорядочения. Теперь это работает отлично, но при попытке обнаружить тип nvarchar (max) -columns он не работает.
Какая ошибка вы получаете? (Я знаю, что это такое, но это должно быть частью вопроса). – Kritner
related: http://stackoverflow.com/questions/7969508/operand-type-clash – Kritner
@ Kritner: добавлено сообщение об ошибке – Andreas