1
整数プライマリキーであるすべてのデータベーステーブル内のどのフィールドが自動インクリメントとしてマークされていないかを知ることができるクエリがありますか?ありがとう。私のDB内のどの整数プライマリキーが自動インクリメントとしてマークされていないのを見つけることができますか?
整数プライマリキーであるすべてのデータベーステーブル内のどのフィールドが自動インクリメントとしてマークされていないかを知ることができるクエリがありますか?ありがとう。私のDB内のどの整数プライマリキーが自動インクリメントとしてマークされていないのを見つけることができますか?
これを試してみてください:私は型 'int型である列を含めています
SELECT
pk_column_name = c.name,
table_name = o.name
FROM sys.indexes AS i
INNER JOIN sys.index_columns AS ic
ON i.object_id = ic.object_id AND i.index_id = ic.index_id
INNER JOIN sys.syscolumns c
ON ic.object_id = c.id AND COL_NAME(ic.object_id, ic.column_id) = c.name
INNER JOIN sys.sysobjects o
ON o.id = c.id
WHERE i.is_primary_key = 1 -- the column is part of a primary key
AND c.status < 128 -- the column is NOT identity enabled
AND o.xtype = 'U' -- the object is a user table
AND c.xtype = 56 -- the column type is int
。あなたにもSMALLINTのようなタイプを含めたい場合は、sys.systypes DMV上で選択を行うことによって、そのXTYPEを検索することができます:ここで
SELECT name, xtype FROM sys.systypes
情報スキーマビューを使用してこれを行う別の方法です:
SELECT
pk_column_name = c.COLUMN_NAME,
table_name = c.TABLE_NAME
FROM INFORMATION_SCHEMA.COLUMNS c
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS k
ON c.TABLE_NAME = k.TABLE_NAME
AND c.TABLE_SCHEMA = k.TABLE_SCHEMA
AND c.TABLE_CATALOG = k.TABLE_CATALOG
AND c.COLUMN_NAME = k.COLUMN_NAME
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS const
ON k.TABLE_NAME = const.TABLE_NAME
AND k.CONSTRAINT_CATALOG = const.CONSTRAINT_CATALOG
AND k.CONSTRAINT_SCHEMA = const.CONSTRAINT_SCHEMA
AND k.CONSTRAINT_NAME = const.CONSTRAINT_NAME
WHERE COLUMNPROPERTY(OBJECT_ID(c.TABLE_NAME), c.COLUMN_NAME, 'IsIdentity') = 0
AND const.CONSTRAINT_TYPE = 'PRIMARY KEY'
AND c.DATA_TYPE = 'int'
これが役立ちます。これは、SQL Server 2005以上でのみ機能することに注意してください。
ありがとうございました!私は、自動増分ではないので、私はc.status <= 128を行う必要がありますPKのを探していますか? – John
<=ではなく、<で十分です。私はあなたのためのコードを変更しました。 o.nameの後に余分なカンマも削除しました。今すぐ働かなければならない。 – deutschZuid
完璧!それはまさに私が探していたものであり、それがライブになる前に私のDB *で問題を見つけるのに役立ちました。ありがとう。 – John