簡體   English   中英

如何使用新名稱創建與現有表類型相同的 SQL 用戶定義表類型?

[英]How to create a SQL User-Defined Table Type identical to an existing one with a new name?

我正在嘗試創建一個工具,該工具將在 MS SQL 服務器上的數據庫中找到以ABC開頭的用戶定義表類型,然后創建一組相同的新用戶定義表類型,但在末尾附加-X的名字。

因此,例如,如果我在現有的 SQL 數據庫上運行這個理論工具,該數據庫包含三個名為MyUdtYourUdtABCUdt的 UDT,結果將是數據庫現在將包含四個 UDT: MyUdtYourUdtABCUdtABCUdt-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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM