2016-04-25 20 views
2

質問は簡単ですが、SQL Serverのプライマリキー(列名)を一覧表示する方法ユーザー定義テーブルタイプSQL Server User Defined Table Typeの主キーをどのようにリストしますか?

ex;

CREATE TYPE [dbo].[MyTableType] AS TABLE 
(
    [ID] int NOT NULL, PRIMARY KEY CLUSTERED ([ID]) 
) 

は、クエリ

でカラム[ID]を取得するにはどのように実際のテーブルではなく、テーブルタイプの主キーを見つけるためにのみ可能であるように見えます。

+0

リンクの質問は全くのUDTに対応していません。他の質問と重複している可能性があります。 –

+0

@PanagiotisKanavos私はそれを求めています。 – Fredou

+0

@PanagiotisKanavos私はそれを指定しています。多くの人が単に重複しているとフラグします。 – Fredou

答えて

2

これは、カタログビューに格納されます。

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'; 
1

ユーザ定義テーブルは実際のテーブルではないため、ではなく、sys.table_typesにエントリがあります。

sys.table_types.type_table_object_idsys.key_constraints.parent_object_idフィールドが使用されている場合は、キー情報は、例えば、他のテーブルと同じようにsys.key_constraintsから取得することができます。その後

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 

、あなたはと同様にカラム名を取得することができます

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] 

それとも

sys.index_columnssys.columnsに参加することによって、他の主キー、
+0

これはまだ私にカラム名を与えません – Fredou

+0

@Fredouあなたはその要求を追加しました*後に回答 –

+0

編集履歴を見て、それは元の質問で、**の最初の行に指定されました名)** – Fredou

関連する問題