获取所有表类型的名称和定义

Red*_*ght 2 sql-server t-sql sql-server-2008-r2 table-valued-parameters

我知道如何创建表类型(用作表值参数) - 但是一旦创建,我如何查看它?

Aar*_*and 5

您可以看到名称列表:

SELECT name FROM sys.table_types;
Run Code Online (Sandbox Code Playgroud)

要查看定义,您可以转到对象资源管理器:

在此处输入图片说明

如果您想自动执行此操作,至少对于列/数据类型(这会忽略索引、键等),您可以构建以下内容:

DECLARE @sql nvarchar(max) = N'', 
  @stub nvarchar(max) = N'SELECT N''$--obj--$'', 
   name, system_type_name
   FROM sys.dm_exec_describe_first_result_set(''DECLARE 
   @tvp $--obj--$; SELECT * FROM @tvp;'',null,null)
   ORDER BY column_ordinal;';

SELECT @sql += REPLACE(@stub, N'$--obj--$', 
  QUOTENAME(s.name) + N'.' + QUOTENAME(t.name))
FROM sys.table_types AS t
INNER JOIN sys.schemas AS s
ON t.[schema_id] = s.[schema_id];

EXEC sys.sp_executesql @sql;
Run Code Online (Sandbox Code Playgroud)

这会产生如下输出(每个表类型一个结果集):

在此处输入图片说明

当然,如果你用撇号命名了一个表类型,它会出错 - 不要这样做)。