I can Get name and definition of all table types
using either of the following scripts:
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
IF OBJECT_ID('TEMPDB..#RADHE') IS NOT NULL
DROP TABLE #RADHE
CREATE TABLE #RADHE
(
RADHE SYSNAME,
COLUMN_NAME SYSNAME,
TYPE_COLUMN SYSNAME,
PRIMARY KEY CLUSTERED (RADHE,COLUMN_NAME)
)
DECLARE @sql nvarchar(max) = N'',
@stub nvarchar(max) = N'SELECT [RADHE]=N''$--RADHE--$'',
COLUMN_NAME=name, TYPE_COLUMN=system_type_name
FROM sys.dm_exec_describe_first_result_set(''DECLARE
@tvp $--RADHE--$; SELECT * FROM @tvp;'',null,null)
ORDER BY column_ordinal;';
SELECT @sql += REPLACE(@stub, N'$--RADHE--$',
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];
INSERT INTO #RADHE
EXEC sys.sp_executesql @sql;
SELECT * FROM #RADHE
SELECT
tt.name AS table_type_name,
c.name AS column_name,
c.column_id,
t.name AS type_name,
c.max_length,
c.precision,
c.scale,
c.collation_name,
c.is_nullable
FROM
sys.columns As c
JOIN sys.table_types AS tt
ON c.object_id = tt.type_table_object_id
JOIN sys.types AS t
ON t.user_type_id = c.user_type_id
ORDER BY
tt.name,
c.column_id
and I can even GRANT REFERENCE on all user defined types using the following script:
SELECT t.name,
'GRANT REFERENCES ON TYPE::'
+ SCHEMA_NAME(t.schema_id)
+ '.'
+ t.name
+ ' TO public;' AS command_to_run
FROM sys.types AS t
where 1=1
AND T.is_table_type = 1
But is there a way to script out all table types in a database?
I am looking to script out this table type, please note the constraints and index created with it:
use TableBackups
go
IF EXISTS(SELECT *
FROM SYS.table_types tt
WHERE tt.NAME=N'DistCritGroupData'
AND SCHEMA_NAME(tt.SCHEMA_ID) = N'dbo')
DROP TYPE DBO.DistCritGroupData
CREATE TYPE [dbo].[DistCritGroupData] AS TABLE
(
[DistCritTypeId] [int] NOT NULL UNIQUE,
[ItemAction] [int] NOT NULL,
[ObjectId] [int] NOT NULL,
[OperatorType] [int] NOT NULL,
PRIMARY KEY NONCLUSTERED
(
[DistCritTypeId] ASC
),
INDEX CIX CLUSTERED (ObjectId, OperatorType)
);
Best Answer
Here my script to create user-defined table and scalar types: