セレインテーブルに主キーが存在するかどうかをテストするSQLスクリプトを理解しようとしています。テーブルに主キーがない場合、スクリプトはテーブル名を出力する必要があります。
Tables to test:
TableA
TableB
TableC
スクリプトを実行した後(そして、TableAとTableCにはPKがありますが、TableBはありません)、出力は次のようになります。
NoKeys
TableB
セレインテーブルに主キーが存在するかどうかをテストするSQLスクリプトを理解しようとしています。テーブルに主キーがない場合、スクリプトはテーブル名を出力する必要があります。
Tables to test:
TableA
TableB
TableC
スクリプトを実行した後(そして、TableAとTableCにはPKがありますが、TableBはありません)、出力は次のようになります。
NoKeys
TableB
私はあなたのための正確な/完全なコードを持っていませんが、ここにアイデアがあります:
データベース内のテーブルのリストをループする必要があります。
SELECT *
FROM information_schema.tables
テーブルに主キーが存在するかどうかを確認するコードは、次のようになります。
SELECT *
FROM information_schema.table_constraints
WHERE constraint_type = 'PRIMARY KEY'
AND table_name = @Your_Table_Name
;WITH tables_with_pk AS (
SELECT t.table_schema, t.table_name
FROM INFORMATION_SCHEMA.TABLES t
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc
ON t.TABLE_NAME = tc.TABLE_NAME AND t.table_schema = tc.table_schema
WHERE tc.constraint_type = 'PRIMARY KEY'
)
SELECT t.table_schema, t.table_name
FROM INFORMATION_SCHEMA.TABLES t
EXCEPT
SELECT table_schema, table_name
FROM tables_with_pk
主キーがない場合は0を返し、主キーがある場合は1を返します
SELECT OBJECTPROPERTY(OBJECT_ID(N'MyTable'),'TableHasPrimaryKey')
私のバージョン:
SELECT 1
FROM SYS.KEY_CONSTRAINTS
WHERE [TYPE] = 'PK' AND [PARENT_OBJECT_ID] = OBJECT_ID('USER.USER');
参考までに、Microsoftのドキュメントをここで確認してください。
どうですか
USE information_schema;
SELECT 'TABLE_NAME' FROM 'TABLES' LEFT JOIN 'TABLE_CONSTRAINTS' USING('TABLE_SCHEMA', 'TABLE_NAME') WHERE 'TABLE_SCHEMA' = '__PUT_YOUR_DB_NAME_HERE__' AND 'CONSTRAINT_NAME' LIKE '%PRIMARY%' AND ISNULL('CONSTRAINT_CATALOG')
私はショーンの答えが好きで、それは私のために働いた。句を追加できます
WHERE t.TABLE_TYPE = 'BASE TABLE'
EXCEPT
ビューを取り戻したくない場合は、ステートメントの直前。
;WITH tables_with_pk AS (
SELECT t.table_schema, t.table_name
FROM INFORMATION_SCHEMA.TABLES t
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc
ON t.TABLE_NAME = tc.TABLE_NAME AND t.table_schema = tc.table_schema
WHERE tc.constraint_type = 'PRIMARY KEY'
)
SELECT t.table_schema, t.table_name
FROM INFORMATION_SCHEMA.TABLES t
WHERE t.TABLE_TYPE = 'BASE TABLE'
EXCEPT
SELECT table_schema, table_name
FROM tables_with_pk