Sql 找出表上的主键和外键
我正在使用下面的语句来获取sql表的详细信息,它是有效的,但是,我似乎不知道如何找出表的主键字段—有人知道如何实现这一点吗Sql 找出表上的主键和外键,sql,sql-server,Sql,Sql Server,我正在使用下面的语句来获取sql表的详细信息,它是有效的,但是,我似乎不知道如何找出表的主键字段—有人知道如何实现这一点吗 SELECT c.name Field, t.name Type, c.max_length MaxLength, c.Precision, c.Scale, c.is_nullable, c.collation_name, '"+ tableName + "' TableName FROM sys.columns
SELECT c.name Field,
t.name Type,
c.max_length MaxLength,
c.Precision,
c.Scale,
c.is_nullable,
c.collation_name,
'"+ tableName + "' TableName FROM sys.columns c INNER JOIN sys.types t ON c.user_type_id = t.user_type_id WHERE object_id = object_id('" + tableName + "') ORDER BY column_id";
理想情况下,我希望上表中的另一个字段能够确定它是主键还是外键,即使它是一个是或否的布尔字段,也有办法实现这一点
我告诉您为什么我要为Sage 200构建一个反向工程表到xml平台,为了生成正确的xml,我需要上面的信息突出显示该表,然后按ALT+F1 type。向下滚动以获取PK和FK信息TABLENAME表示您的表名
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='TABLENAME'
请尝试下面的查询。请注意: 我仅针对下图中描述的场景Customer->Address对其进行测试; Microsoft SQL Server版本为Microsoft SQL Server 2016 RTM-GDR KB4019088-13.0.1742.0 X64 2017年7月5日23:41:17版权所有c Microsoft Corporation Developer Edition 64位Windows 10 Home 6.3 Build 17763:; --上面客户表的输出--
为什么假设主键是一个字段?什么是主键?这是一种限制。您在元数据中的哪里可以找到约束信息?我在结果中没有看到一个字段说主键可以为空。没有,但没有任何内容说明它是主键。请不要创建多个答案编辑现有答案以进行更改。请向下滚动查看
SELECT
C.name,
C.column_id,
C.object_id,
C.max_length MaxLength,
C.Precision,
C.Scale,
C.is_nullable,
C.collation_name,
FK.name AS FK_name,
KC.name AS PK_name
FROM
sys.columns AS C
LEFT OUTER JOIN
sys.foreign_key_columns AS FKC ON C.object_id = FKC.parent_object_id AND C.column_id = FKC.parent_column_id
LEFT OUTER JOIN
sys.foreign_keys AS FK ON FKC.constraint_object_id = FK.object_id
LEFT OUTER JOIN
sys.key_constraints AS KC ON C.object_id = KC.parent_object_id AND C.column_id = KC.unique_index_id
WHERE
C.object_id = OBJECT_ID('<table name>')
ORDER BY
C.column_id