2016-02-12 44 views
2

如何獲得在下列格式查詢來獲取列的元數據,鍵和索引

column_name column_data_type column_data_length index   key 
----------------------------------------------------------------------------- 
column1  int      4    CLUSTERED  PRIMARYKEY 
column2  int      4    NONCLUSTERED FOREIGNKEY 
column3  varchar    20    NULL   NULL 

回答

1
SELECT 
    C.TABLE_SCHEMA+'.'+ C.TABLE_NAME as TableName, 
    C.COLUMN_NAME as ColumnName, 
    C.DATA_TYPE as ColumnDataType, 
    C.CHARACTER_MAXIMUM_LENGTH as ColumnDataTypeLength, 
    (CASE 
     WHEN K.CONSTRAINT_NAME like 'PK_%' then 'PRIMARYKEY' 
     WHEN K.CONSTRAINT_NAME like 'FK_%' then 'FOREIGNKEY' 
     ELSE NULL 
    END) as [Keys], 
    (SELECT  
      i.[type_desc] 
     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].[columns] co 
      ON ic.column_id = co.column_id 
      AND ic.[object_id] = co.[object_id] 
     WHERE 
      i.[object_id] = OBJECT_ID(C.TABLE_SCHEMA+'.'+ C.TABLE_NAME) 
      AND co.name=C.COLUMN_NAME 
    ) AS [Indexes] 
FROM 
    INFORMATION_SCHEMA.COLUMNS C LEFT JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE K 
     ON C.COLUMN_NAME=k.COLUMN_NAME 
      AND C.TABLE_NAME=K.TABLE_NAME 
WHERE C.TABLE_SCHEMA+'.'+ C.TABLE_NAME [email protected] 
ORDER BY C.ORDINAL_POSITION ASC 
+0

很高興你能夠解決它自己的表或視圖的列的元數據,並公佈了答案其他面臨類似問題的人。請考慮接受您的答案,方法是點擊答案左側的灰色複選圖標。 – DhruvJoshi