Sql server 显示架构中所有表的主键列和非空列
我是SQL Server新手,我正在尝试获取架构中的所有信息,如表名、列以及与该表关联的所有列、IsNullable、主键如果列为PK,则应显示yes如果不是,则显示NO 我尝试了以下查询: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
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