Sql-Server

如何從系統表中獲取 MSSQL 類型定義?

  • April 11, 2019

如果我有一個使用者表類型(如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 詢問它時它是如何建構它的,但它有可能非常複雜(儘管是防彈的)。

引用自:https://dba.stackexchange.com/questions/234550