是否可以从INFORMATION_SCHEMA获取表类型定义?

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)


pal*_*ukh 7

获取列名称,类型详细信息和可为空性:

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)