获取具有主键约束的表列

时间:2014-07-24 11:41:48

标签: sql sql-server

我想获取特定表的所有列(MSSQL SERVER)以及它是_PK还是Not。到目前为止,我试过了:

SELECT TABLE_CATALOG AS Database_Name, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, IS_NULLABLE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE
TABLE_NAME = 'TableName'

它的Out Put是:

Database_Name   TABLE_SCHEMA    TABLE_NAME  COLUMN_NAME IS_NULLABLE
-------------   ------------    ----------  ----------- ----------- 

现在我想要一个更多列到表格上面说'IS_PRIMARYKEY',意味着我希望输出为:

 Database_Name  TABLE_SCHEMA    TABLE_NAME  COLUMN_NAME IS_NULLABLE IS_PRIMARYKEY
 -------------  ------------    ----------  ----------- ----------- -------------

如何在一个查询/程序中实现?

由于

2 个答案:

答案 0 :(得分:0)

        SELECT TABLE_CATALOG AS Database_Name, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, IS_NULLABLE, if(COLUMN_KEY = 'PRI', 'YES', 'NO') AS IS_PRIMARYLEY 
FROM INFORMATION_SCHEMA.COLUMNS
    WHERE
    TABLE_NAME = 'TableName'

您可以使用If条件执行此操作,对于Columns使用*

的数字

答案 1 :(得分:0)

约束数据存储在不同的表格中你需要加入匹配表约束和列使用约束来获得主要关键列。

但是,由于您需要单个查询中的详细信息,因此我创建了一个我想要产生所需输出的ALIAS。以下QUERY将给你适当的回答。

不能创建好东西,因为这只是系统表。

我已经为我的TEMP表做了这件事tbl_primaryKey你可以根据自己的需要更换表名。

SELECT Database_Name,TABLE_SCHEMA,TABLE_NAME,COLUMN_NAME,IS_NULLABLE, CASE WHEN (IS_PRIMARYKEY IS NULL) THEN '' ELSE 'YES' END AS [IS_PRIMARYKEY]
FROM 

(SELECT cols.TABLE_CATALOG AS Database_Name, cols.TABLE_SCHEMA, cols.TABLE_NAME, cols.COLUMN_NAME, cols.IS_NULLABLE, 

(SELECT Col.Column_Name from 
    INFORMATION_SCHEMA.TABLE_CONSTRAINTS Tab, 
    INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE Col 
WHERE 
    Col.Constraint_Name = Tab.Constraint_Name
    AND Col.Table_Name = Tab.Table_Name
    AND Constraint_Type = 'PRIMARY KEY'
    AND Col.Table_Name = 'tbl_primaryKey'
    AND cols.COLUMN_NAME = Col.COLUMN_NAME
    ) AS IS_PRIMARYKEY
FROM INFORMATION_SCHEMA.COLUMNS cols
WHERE
cols.TABLE_NAME = 'tbl_primaryKey' ) A