如何从表中选择主键列?

use*_*347 6 sql sql-server-2008

我需要选择作为主键的列或非空的列.我怎样才能做到这一点?

我只想要列,而不是值.

Ank*_*kit 12

要列出主键列,您可以尝试以下查询:

SELECT
    kc.name,
    c.NAME
FROM 
    sys.key_constraints kc
INNER JOIN 
    sys.index_columns ic ON kc.parent_object_id = ic.object_id  and kc.unique_index_id = ic.index_id
INNER JOIN 
    sys.columns c ON ic.object_id = c.object_id AND ic.column_id = c.column_id
WHERE
    kc.type = 'PK'
Run Code Online (Sandbox Code Playgroud)

并列出外键,使用以下内容:

SELECT
    OBJECT_NAME(parent_object_id) 'Parent table',
    c.NAME 'Parent column name',
    OBJECT_NAME(referenced_object_id) 'Referenced table',
    cref.NAME 'Referenced column name'
FROM 
    sys.foreign_key_columns fkc
INNER JOIN 
    sys.columns c 
       ON fkc.parent_column_id = c.column_id 
          AND fkc.parent_object_id = c.object_id
INNER JOIN 
    sys.columns cref 
       ON fkc.referenced_column_id = cref.column_id 
          AND fkc.referenced_object_id = cref.object_id
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.

  • 这也会带回所有索引,所以这不起作用 (3认同)
  • 我不确定主键查询是否正确 - 它在我的测试数据库中返回额外的非PrimaryKey字段. (2认同)

San*_*ath 2

下一个答案更合适,我不知道如何转移接受的答案。

SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS  
WHERE TABLE_NAME = '<TABLE_NAME>' and IS_NULLABLE = 'NO'
Run Code Online (Sandbox Code Playgroud)

  • 非空列不一定是主键 (11认同)