sql - 我如何知道 CONSTRAINT_NAME 是主键还是外键?

标签 sql sql-server metadata constraints table-structure

在 SQL Server 2005 上使用此 SQL

SELECT CONSTRAINT_NAME
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE 
WHERE TABLE_NAME = @TableName
  AND COLUMN_NAME=@ColumnName

我得到主键和外键。

如何才能只获取外键? 如何查看约束是主键还是外键?

谢谢

最佳答案

找到了一个更优雅的解决方案 here

下面添加的代码是为了完整性,但所有功劳都归功于 Pinal Dave

SELECT f.name AS ForeignKey,
   OBJECT_NAME(f.parent_object_id) AS TableName,
   COL_NAME(fc.parent_object_id, 
   fc.parent_column_id) AS ColumnName,
   OBJECT_NAME (f.referenced_object_id) AS ReferenceTableName,
   COL_NAME(fc.referenced_object_id, 
   fc.referenced_column_id) AS ReferenceColumnName
FROM sys.foreign_keys AS f
LEFT JOIN sys.foreign_key_columns AS fc
   ON f.OBJECT_ID = fc.constraint_object_id

如果您只想要主键...

SELECT i.name AS IndexName,
        OBJECT_NAME(ic.OBJECT_ID) AS TableName,
        COL_NAME(ic.OBJECT_ID,ic.column_id) AS ColumnName
FROM sys.indexes AS i
        INNER JOIN sys.index_columns AS ic
        ON i.OBJECT_ID = ic.OBJECT_ID 
    AND i.index_id = ic.index_id
WHERE i.is_primary_key = 1

将此添加为附加答案,因为它与我之前的答案相去甚远:)

关于sql - 我如何知道 CONSTRAINT_NAME 是主键还是外键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/555622/

相关文章:

ios - 使用Swift的iOS Shoutcast访问元数据

python - Pylons 1.0 AttributeError : 'module' object has no attribute 'metadata'

mysql - 如何合并两个具有不同 set 和 where 子句的更新查询?

mysql - 用于计算多列结果的 SQL 命令?

mysql - 如果行中只有一条记录重复

SQL 服务器 : Can concurrent threads update same row?

python - 在 Python/Pandas 中创建带有元数据头的 csv 文件,后跟时间序列

asp.net - XML 片段中不允许使用 DTD - xml 转为 sql

sql-server - ',' 附近的语法不正确

sql-server - SSIS 平面文件数字无法转换为 SQL bigint