3

主キーを持つ列の「主キー」を印刷するだけですか?情報スキーマと主キー

プライマリキーを持つ1つの列と、keyTypeに空白の他の列ではなく、テーブルにプライマリキーがある場合は、すべての列に対して「プライマリキー」を取得します。さらにとして

SELECT c.TABLE_NAME, 
      c.COLUMN_NAME, 
      c.DATA_TYPE, 
      c.Column_default, 
      c.character_maximum_length, 
      c.numeric_precision, 
      c.is_nullable, 
      CASE 
      WHEN u.CONSTRAINT_TYPE = 'PRIMARY KEY' THEN 'primary key' 
      ELSE '' 
      END AS KeyType 
    FROM INFORMATION_SCHEMA.COLUMNS as c 
LEFT JOIN information_schema.table_constraints as u ON c.table_name = u.table_name 
ORDER BY table_name 
+0

MS_Description(またはその他のプロパティを拡張する)同じ時間に見ることの可能な重複可能です(http://stackoverflow.com/questions/ 1349357/how-to-determine-a-primary-key-for-a-table-in-sql-server) –

答えて

23
SELECT c.TABLE_NAME, c.COLUMN_NAME,c.DATA_TYPE, c.Column_default, c.character_maximum_length, c.numeric_precision, c.is_nullable 
      ,CASE WHEN pk.COLUMN_NAME IS NOT NULL THEN 'PRIMARY KEY' ELSE '' END AS KeyType 
FROM INFORMATION_SCHEMA.COLUMNS c 
LEFT JOIN (
      SELECT ku.TABLE_CATALOG,ku.TABLE_SCHEMA,ku.TABLE_NAME,ku.COLUMN_NAME 
      FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS tc 
      INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS ku 
       ON tc.CONSTRAINT_TYPE = 'PRIMARY KEY' 
       AND tc.CONSTRAINT_NAME = ku.CONSTRAINT_NAME 
     ) pk 
ON c.TABLE_CATALOG = pk.TABLE_CATALOG 
      AND c.TABLE_SCHEMA = pk.TABLE_SCHEMA 
      AND c.TABLE_NAME = pk.TABLE_NAME 
      AND c.COLUMN_NAME = pk.COLUMN_NAME 
ORDER BY c.TABLE_SCHEMA,c.TABLE_NAME, c.ORDINAL_POSITION 
+1

優れた仕事、それはまさに私が望んでいた...私はあなたにもっとポイントを与えることができたらいいと思う。 :o) – cdub

0

、見て検討してください:たまにMSチームから学ぶ

sp_helptext N'sp_help' 

素晴らしいところです。 :-)

+0

これは230行のコードを出力します。それは何ですか? – slartidan

0

非常に小さい最初の答えに追加します。これは、[SQL Serverのテーブルの主キーを決定する方法は?]

SELECT c.TABLE_NAME, c.COLUMN_NAME,c.DATA_TYPE, c.Column_default, c.character_maximum_length, c.numeric_precision, c.is_nullable 
      ,CASE WHEN pk.COLUMN_NAME IS NOT NULL THEN 'PRIMARY KEY' ELSE '' END AS KeyType, c.ORDINAL_POSITION 
      ,convert(varchar(8000), ex.value) as coln 
    FROM INFORMATION_SCHEMA.COLUMNS c 
    LEFT JOIN (
     SELECT ku.TABLE_CATALOG,ku.TABLE_SCHEMA,ku.TABLE_NAME,ku.COLUMN_NAME 
      FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS tc 
      INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS ku 
       ON tc.CONSTRAINT_TYPE = 'PRIMARY KEY' 
       AND tc.CONSTRAINT_NAME = ku.CONSTRAINT_NAME 
     ) pk 
    ON c.TABLE_CATALOG = pk.TABLE_CATALOG 
      AND c.TABLE_SCHEMA = pk.TABLE_SCHEMA 
      AND c.TABLE_NAME = pk.TABLE_NAME 
      AND c.COLUMN_NAME = pk.COLUMN_NAME 
    outer apply ::fn_listextendedproperty('MS_Description', 'schema', 'dbo', 'table', c.TABLE_NAME, 'column', c.COLUMN_NAME) ex 
    ORDER BY c.TABLE_SCHEMA,c.TABLE_NAME, c.ORDINAL_POSITION