Sql-Server
如何從系統表中獲取 MSSQL 類型定義?
如果我有一個使用者表類型(如
CREATE TYPE ...
),我如何在系統表中找到它的定義?我知道我可以通過 SSMS 通過 GUI 看到它,但我想有一個查詢來從系統表中檢索它。
我沒有通過任何模組看到它:
SELECT * FROM sys.all_sql_modules m WHERE m.definition like 'CREATE TYPE %' --doesn't output any types definitions
您需要查詢
sys.table_types
:SELECT SchemaName = SCHEMA_NAME(TYPE.schema_id), TypeName = TYPE.name, ColumnID = COL.column_id, [Column] = COL.name, DataType = ST.name, IsNullable = COL.Is_Nullable, Length = COL.max_length, Precision = COL.[precision], Scale = COL.scale, Collation = ST.collation FROM sys.table_types TYPE INNER JOIN sys.columns COL ON TYPE.type_table_object_id = COL.object_id INNER JOIN sys.systypes AS ST ON ST.xtype = COL.system_type_id WHERE TYPE.is_user_defined = 1 ORDER BY SchemaName, TypeName, ColumnID
確保您連接到正確的數據庫。
如果您想要一個
CREATE TYPE
類似於 SSMS 的語句,則必鬚根據前一個查詢的結果來建構它。或者跟踪 SSMS 的查詢以查看當您從 GUI 詢問它時它是如何建構它的,但它有可能非常複雜(儘管是防彈的)。