Можно ли получить определения типа таблицы из INFORMATION_SCHEMA?
Я знаю, что определенные пользователем типы хранятся в information_schema.domains
, но можно ли получить определения типов, которые имеют тип table type
?
Чтобы быть ясным, я ищу определение фактического типа таблицы:
например. Я хочу получить определения столбцов для myTableType
CREATE TYPE myTableType AS TABLE(
Id INT,
SomeValue NVARCHAR(20)
);
Ответы
Ответ 1
Чтобы получить список столбцов для пользовательского типа таблицы, запустите это. Вам нужно будет заменить имя таблицы для some_table_type
:
SELECT *
FROM sys.columns
WHERE object_id IN (
SELECT type_table_object_id
FROM sys.table_types
WHERE name = 'some_table_type'
);
Ответ 2
Получить список типа таблицы, столбцов и типа данных для определенного пользователем типа таблицы.
select tt.name AS table_Type, c.name AS table_Type_col_name,st.name AS
table_Type_col_datatype
from sys.table_types tt
inner join sys.columns c on c.object_id = tt.type_table_object_id
INNER JOIN sys.systypes AS ST ON ST.xtype = c.system_type_id
Ответ 3
select tt.name AS table_Type, c.name AS Column_Name,st.name AS Datatype,
CASE WHEN st.name='numeric' THEN '(' + Convert(varchar(5),C.precision) + ',' + Convert(varchar(5),C.scale) + ')'
WHEN st.name='varchar' OR st.name='nvarchar' THEN '(' + Convert(varchar(5),c.max_length) + ')'
ELSE '' END AS Size
,CASE WHEN C.is_nullable =0 THEN 'NOT NULL,' ELSE ',' END AS Nullable
from sys.table_types tt
inner join sys.columns c on c.object_id = tt.type_table_object_id
INNER JOIN sys.systypes AS ST ON (ST.xusertype = c.system_type_id AND ST.uid=4)
ORDER BY tt.name, c.column_id
Ответ 4
С помощью Management Studio также можно получить доступ к визуальному представлению настраиваемых/определяемых пользователем типов таблиц, как и обычные таблицы.
Разница заключается в том, что пользовательские таблицы отображаются в программируемости node в проводнике объектов, как показано ниже, вместо Таблицы:
![Пользовательский тип таблицы, определяемый пользователем]()