Dus*_*gen 19 t-sql sql-server sql-server-2008-r2
我知道存储了用户定义的类型information_schema.domains,但是是否可以获得类型类型的定义table type?
要清楚我正在寻找实际的表类型定义:
例如,我想获取列定义 myTableType
CREATE TYPE myTableType AS TABLE(
Id INT,
SomeValue NVARCHAR(20)
);
Run Code Online (Sandbox Code Playgroud)
Yuc*_*uck 28
要获取用户定义的表类型的列列表,请运行此列.您需要将表名替换为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'
);
Run Code Online (Sandbox Code Playgroud)
小智 10
获取用户定义的表类型的表类型,列和数据类型的列表.
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
Run Code Online (Sandbox Code Playgroud)
获取列名称,类型详细信息和可为空性:
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 IN ('char', 'nchar', 'varchar', '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 st ON (st.xusertype = c.system_type_id AND st.uid = 4)
ORDER BY tt.name, c.column_id
Run Code Online (Sandbox Code Playgroud)