2017-06-05 1 views
1

特定のデータベース上の指定されたキー/キー名ですべてのテーブルを取得できるクエリを探しています。このような 何か:データベース内のすべてのテーブルをプライマリキーで検索

SELECT table_name 
FROM information_Schema.columns 
WHERE column_name='ID_UNICO' 
AND Constraint_Type = 'PRIMARY KEY' 

私が検索してきたと私は見つけることができる最高だった:

SELECT Col.Column_Name from 
    INFORMATION_SCHEMA.TABLE_CONSTRAINTS Tab, 
    INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE Col 
WHERE 
    Col.Constraint_Name = Tab.Constraint_Name 
    AND Col.Table_Name = Tab.Table_Name 
    AND Constraint_Type = 'PRIMARY KEY' 
    AND Col.Table_Name = '<your table name>' 

これは、特定のテーブルのPK年代を取得し、私はPK名でTABLE_NAMEを見つけたいです。

SELECT table_name 
FROM information_Schema.columns 
WHERE column_name='ID_UNICO' 
and ordinal_position = 1; 

これもこれが見つかりましたが、これは私にそれがPKであることを保証しないテーブルの最初の列を与えます。

重複も見つかりませんでした。

答えて

1

あなたはこのクエリを使用することができます。 「YOUR_COLUMN_NAME」を主キーの列名に置き換えます。

SELECT Table_Name 
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE 
WHERE OBJECTPROPERTY(OBJECT_ID(CONSTRAINT_SCHEMA + '.' + QUOTENAME(CONSTRAINT_NAME)), 'IsPrimaryKey') = 1 
and COLUMN_NAME ='YOUR_COLUMN_NAME' 
+0

あなたの助けていただきありがとうございます、短くて簡単です!実際にはそれほど複雑ではないので、これを最善の答えとしなければならなかった。 –

+0

よろしくお願いします!私は喜んでお手伝いします。 –

2

これは機能しますか?ここで

DECLARE @ColName AS VARCHAR(MAX) 
SET @ColName = 'CourseId' 
SELECT 
    TABLE_NAME 
FROM 
    INFORMATION_SCHEMA.COLUMNS 
WHERE 
    COLUMNPROPERTY(OBJECT_ID(TABLE_SCHEMA + '.' + TABLE_NAME), COLUMN_NAME, 'IsIdentity') = 1 
    AND COLUMN_NAME = @ColName 
+0

期待どおりに動作してくれてありがとう! –

1

あなたは、あなたのTABLE_NAMEを返し、行くの列に制約名を結びつけるためにCONSTRAINT_COLUMN_USAGEにTABLE_CONSTRAINTSに参加:

SELECT CCU.COLUMN_NAME, 
     CONS.TABLE_NAME 
FROM INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE CCU 
     JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS CONS 
     ON CONS.CONSTRAINT_NAME = CCU.CONSTRAINT_NAME 
WHERE CONS.CONSTRAINT_TYPE = 'PRIMARY KEY' 
     AND CCU.COLUMN_NAME = 'ID_UNICO' 
+0

良いソリューションをありがとう! –

関連する問題