Мне нужно создать тип таблицы пользователя. Я предпочитаю использовать один оператор SQL. Не обращая внимания на навороты, которые можно отнести к такому оператору create, я сначала вывел логику для генерации оператора create для таблицы из одного столбца с оператором:
select 'create type ' + tt.name + ' as TABLE (' + c.name + ' ' + t.name +
case
when t.name in ('varchar','char','nvarchar','nchar','binary','varbinary') then
'(' +
case
when c.max_length = -1 then 'MAX'
else convert(varchar, c.max_length)
end + ')'
when t.name in ('numeric','decimal') then
'(' + convert(varchar, c.precision) + ',' + convert(varchar, c.scale) + ')'
else ''
end + ')'
from sys.table_types tt
join sys.columns c
on tt.type_table_object_id = c.object_id
join sys.types t
on c.system_type_id = t.system_type_id and
c.user_type_id = t.user_type_id
Это ограничено по объему с точки зрения типов данных и т. Д., Но пока достаточно. То, что я пытаюсь выяснить, - это расширить его так, чтобы оператор, который создает определения столбцов таблицы, находился в каком-то внутреннем цикле для обработки от 1 до n столбцов. Кажется, что это должно быть возможно, но я не смог выработать логику.