Sql server 显示架构中所有表的主键列和非空列

Sql server 显示架构中所有表的主键列和非空列,sql-server,Sql Server,我是SQL Server新手,我正在尝试获取架构中的所有信息,如表名、列以及与该表关联的所有列、IsNullable、主键如果列为PK,则应显示yes如果不是,则显示NO 我尝试了以下查询: select a.table_name, a.column_name, a.is_nullable, case when b.CONSTRAINT_NAME like '%_PK' then 'PRIMARY_KEY' else 'NO' end a

我是SQL Server新手,我正在尝试获取架构中的所有信息,如表名、列以及与该表关联的所有列、IsNullable、主键如果列为PK,则应显示yes如果不是,则显示NO

我尝试了以下查询:

select 
    a.table_name, a.column_name, a.is_nullable,
    case  
       when b.CONSTRAINT_NAME like '%_PK' then 'PRIMARY_KEY'
       else 'NO'
    end as CONSTRAINT_NAME 
from 
    INFORMATION_SCHEMA.COLUMNS a 
left outer join 
    INFORMATION_SCHEMA.KEY_COLUMN_USAGE b on a.table_name = b.table_name
                                          and b.CONSTRAINT_NAME = 'Primary key' 
where 
    a.table_name = 'Orders' 
但我没有得到主键列的正确输出。为表中的所有列设置主键。

修复1:

将列名称也添加到联接条件中

修正2:

您可能要寻找的结果可以通过连接INFORMATION\u SCHEMA.TABLE\u CONSTRAINTS TABLE并使用CONSTRAINT\u NAME标识主键来获得,这不是一个明智的选择

更好的方法是

SELECT A.TABLE_NAME,
       A.COLUMN_NAME,
       A.IS_NULLABLE,
       CASE
           WHEN  C.CONSTRAINT_TYPE = 'PRIMARY KEY' 
           THEN 'YES'
           ELSE 'NO'
       END AS CONSTRAINT_NAME
FROM INFORMATION_SCHEMA.COLUMNS A
LEFT JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE B 
    ON A.TABLE_NAME = B.TABLE_NAME AND 
    A.COLUMN_NAME = B.COLUMN_NAME
LEFT JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS C ON 
        B.TABLE_NAME = C.TABLE_NAME AND 
        B.CONSTRAINT_CATALOG = C.CONSTRAINT_CATALOG AND 
        B.CONSTRAINT_SCHEMA = C.CONSTRAINT_SCHEMA AND 
        B.CONSTRAINT_NAME = C.CONSTRAINT_NAME 
WHERE -- C.CONSTRAINT_TYPE = 'PRIMARY KEY' AND 
    A.TABLE_NAME = 'Orders'

请参阅dbname.INFORMATION\u SCHEMA.COLUMNS。您可以在那里运行select查询。已派生的表名、列名和该表中的列都可以为空。……只有主键列有问题。……太好了,这就是我要找的,非常感谢您的帮助。@Geethanand,很高兴我能帮上忙。@Geethanand