[英]How to create a SQL User-Defined Table Type identical to an existing one with a new name?
我正在嘗試創建一個工具,該工具將在 MS SQL 服務器上的數據庫中找到以ABC
開頭的用戶定義表類型,然后創建一組相同的新用戶定義表類型,但在末尾附加-X
的名字。
因此,例如,如果我在現有的 SQL 數據庫上運行這個理論工具,該數據庫包含三個名為MyUdt
、 YourUdt
和ABCUdt
的 UDT,結果將是數據庫現在將包含四個 UDT: MyUdt
、 YourUdt
、 ABCUdt
和ABCUdt-X
這似乎與關於如何創建與表匹配的 UDT 的問題非常相似: Automatically generate a user defined table type that matches an existing table
我知道 SQL 數據庫包含它的每個存儲過程的定義作為文本,這可以在sys
表上查詢,但看起來沒有這樣的 UDT 定義存儲。
在我 go 麻煩地編寫將現有 UDT 分解為語句以創建新 UDT 的代碼之前,任何人都可以告訴我是否有辦法編寫一條命令,“嘿 MS SQL 服務器,使用 UDT ABCUdt
並創建另一個與它完全相同的名為ABCUdt-X
“?
與用戶定義表 SQL 一樣,服務器在系統視圖中存儲用戶定義表類型及其列的定義,例如:
drop type if exists dbo.ABCTest;
create type dbo.ABCTest as table (
TestID int not null,
TestName nvarchar(50)
);
declare @type_table_object_id int = (
select type_table_object_id
from sys.table_types
where [name] = N'ABCTest'
);
select * from sys.table_types where type_table_object_id = @type_table_object_id;
select * from sys.all_columns where object_id = @type_table_object_id;
姓名 | system_type_id | user_type_id | 模式標識 | principal_id | 最長長度 | 精確 | 規模 | 排序規則名稱 | is_nullable | is_user_defined | is_assembly_type | default_object_id | rule_object_id | is_table_type | type_table_object_id | is_memory_optimized |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
ABC測試 | 243 | 257 | 1個 | NULL | -1 | 0 | 0 | NULL | 0 | 1個 | 0 | 0 | 0 | 1個 | 1778105375 | 0 |
object_id | 姓名 | column_id | system_type_id | user_type_id | 最長長度 | 精確 | 規模 | 排序規則名稱 | is_nullable | is_ansi_padded | is_rowguidcol | is_identity | is_computed | is_filestream | is_replicated | is_non_sql_subscribed | is_merge_published | is_dts_replicated | is_xml_document | xml_collection_id | default_object_id | rule_object_id | is_sparse | is_column_set | generated_always_type | generated_always_type_desc | 加密類型 | encryption_type_desc | 加密算法名稱 | column_encryption_key_id | column_encryption_key_database_name | 隱藏 | is_masked | 圖形類型 | graph_type_desc |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1778105375 | 測試編號 | 1個 | 56 | 56 | 4個 | 10 | 0 | NULL | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 不適用 | NULL | NULL | NULL | NULL | NULL | 0 | 0 | NULL | NULL |
1778105375 | 測試名稱 | 2個 | 231 | 231 | 100 | 0 | 0 | Latin1_General_100_CI_AS | 1個 | 1個 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 不適用 | NULL | NULL | NULL | NULL | NULL | 0 | 0 | NULL | NULL |
您可以從此信息重新生成用戶定義表類型的 SQL 定義,以實現使用不同名稱重新創建它,但正如 SMor 在評論中所說,讓 SMO 為您完成這項工作可能更容易。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.