2012-01-23 6 views

答えて

2

これを試してみてください:私は型 '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以上でのみ機能することに注意してください。

+0

ありがとうございました!私は、自動増分ではないので、私はc.status <= 128を行う必要がありますPKのを探していますか? – John

+0

<=ではなく、<で十分です。私はあなたのためのコードを変更しました。 o.nameの後に余分なカンマも削除しました。今すぐ働かなければならない。 – deutschZuid

+0

完璧!それはまさに私が探していたものであり、それがライブになる前に私のDB *で問題を見つけるのに役立ちました。ありがとう。 – John

関連する問題