我的問題很簡單,你如何列出SQL Server的主鍵(列名)用戶定義表類型?如何列出SQL Server用戶定義表類型的主鍵?
ex;
CREATE TYPE [dbo].[MyTableType] AS TABLE
(
[ID] int NOT NULL, PRIMARY KEY CLUSTERED ([ID])
)
如何使用查詢
得到列[ID]
這似乎是唯一可能找到真正的表,而不是表類型的主鍵。
我的問題很簡單,你如何列出SQL Server的主鍵(列名)用戶定義表類型?如何列出SQL Server用戶定義表類型的主鍵?
ex;
CREATE TYPE [dbo].[MyTableType] AS TABLE
(
[ID] int NOT NULL, PRIMARY KEY CLUSTERED ([ID])
)
如何使用查詢
得到列[ID]
這似乎是唯一可能找到真正的表,而不是表類型的主鍵。
這是存儲在目錄中的觀點:
SELECT c.Name
FROM sys.table_types AS tt
INNER JOIN sys.key_constraints AS kc
ON kc.parent_object_id = tt.type_table_object_id
INNER JOIN sys.indexes AS i
ON i.object_id = kc.parent_object_id
AND i.index_id = kc.unique_index_id
INNER JOIN sys.index_columns AS ic
ON ic.object_id = kc.parent_object_id
INNER JOIN sys.columns AS c
ON c.object_id = ic.object_id
AND c.column_id = ic.column_id
WHERE tt.Name = 'YourTypeName';
用戶定義的表格不是實際的表格,因此它在sys.table_types
中有條目,而不是在sys.tables
中。
的關鍵信息可以從sys.key_constraints
檢索與其他表,如果使用sys.table_types.type_table_object_id
和sys.key_constraints.parent_object_id
領域,如:
create TYPE TestTableType AS TABLE
(
ID int primary key,
Name nVARCHAR(50)
)
declare @typeID int
select @typeId=type_table_object_id
from sys.table_types
where name='TestTableType'
select @typeId
-- Returns 1134627085
select *
from sys.key_constraints
where [email protected]
-- Returns
-- PK__TT_TestT__3214EC27BA14A4A6 1150627142 NULL 4 1134627085 PK PRIMARY_KEY_CONSTRAINT 2016-04-25 17:36:34.890 2016-04-25 17:36:34.890 1 0 0 1 1
之後,你可以在路上與同樣得到列名其他主鍵,通過與sys.index_columns
和sys.columns
接合:
select col.name
from sys.key_constraints kcon
inner join sys.index_columns indcol on indcol.object_id=kcon.parent_object_id
inner join sys.columns col on col.object_id = kcon.parent_object_id
and col.column_id = indcol.column_id
where [email protected]
或者
select col.name
from sys.table_types tt
inner join sys.key_constraints kcon on type_table_object_id=kcon.parent_object_id
inner join sys.index_columns indcol on indcol.object_id=kcon.parent_object_id
inner join sys.columns col on col.object_id = kcon.parent_object_id and col.column_id = indcol.column_id
where tt.name='TestTableType'
鏈接的問題沒有解決的UDT的。最有可能這*是*另一個問題 –
@PanagiotisKanavos我沒有找到一個,這就是爲什麼我問它 – Fredou
@PanagiotisKanavos我指定,因爲很多人會簡單地將它標記爲重複 – Fredou