Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 找出表上的主键和外键_Sql_Sql Server - Fatal编程技术网

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

我正在使用下面的语句来获取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 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