Sql server 列被键入到哪个表
我有一个查询,它给出了我的列名、数据类型、最大长度、可空值 如果列有外键,我还需要知道该列引用的表的名称 这是我的问题Sql server 列被键入到哪个表,sql-server,foreign-keys,Sql Server,Foreign Keys,我有一个查询,它给出了我的列名、数据类型、最大长度、可空值 如果列有外键,我还需要知道该列引用的表的名称 这是我的问题 SELECT c.name 'Column Name', t.Name 'Data type', c.max_length 'Max Length', c.is_nullable, ISNULL(i.is_primary_key, 0) 'Primary Key' FROM sys.columns c INNER JOIN sys.typ
SELECT
c.name 'Column Name',
t.Name 'Data type',
c.max_length 'Max Length',
c.is_nullable,
ISNULL(i.is_primary_key, 0) 'Primary Key'
FROM
sys.columns c
INNER JOIN
sys.types t ON c.system_type_id = t.system_type_id
LEFT OUTER JOIN
sys.index_columns ic ON ic.object_id = c.object_id AND ic.column_id = c.column_id
LEFT OUTER JOIN
sys.indexes i ON ic.object_id = i.object_id AND ic.index_id = i.index_id
WHERE
c.object_id = OBJECT_ID('Table_Name')
试试这个-
SELECT
[Column Name] = c.name
, [Data type] = t.name
, [Max Length] = c.max_length
, c.is_nullable
, [Primary Key] = ISNULL(i.is_primary_key, 0)
, IsFK = ISNULL(fkc.parent_object_id / fkc.parent_object_id, 0)
FROM sys.columns c WITH(NOWAIT)
JOIN sys.types t WITH(NOWAIT) ON c.system_type_id = t.system_type_id AND c.user_type_id = t.user_type_id
LEFT JOIN (
SELECT i.[object_id], ic.column_id, i.is_primary_key
FROM sys.indexes i WITH(NOWAIT)
JOIN sys.index_columns ic WITH(NOWAIT) ON ic.[object_id] = i.[object_id]
AND i.index_id = ic.index_id
WHERE i.is_primary_key = 1
) i ON c.[object_id] = i.[object_id] AND c.column_id = i.column_id
LEFT JOIN sys.foreign_key_columns fkc WITH(NOWAIT) ON fkc.parent_object_id = c.[object_id]
AND fkc.parent_column_id = c.column_id
WHERE c.[object_id] = OBJECT_ID('Table_Name')
多亏了德瓦特,你让我走上了正确的道路 以下是答案供将来参考
SELECT
[Column Name] = c.name
, [Data type] = t.name
, [Max Length] = c.max_length
, c.is_nullable
, [Primary Key] = ISNULL(i.is_primary_key, 0)
, OBJECT_NAME(fkc.referenced_object_id)
FROM sys.columns c WITH(NOWAIT)
JOIN sys.types t WITH(NOWAIT) ON c.system_type_id = t.system_type_id AND c.user_type_id = t.user_type_id
LEFT JOIN (
SELECT i.[object_id], ic.column_id, i.is_primary_key
FROM sys.indexes i WITH(NOWAIT)
JOIN sys.index_columns ic WITH(NOWAIT) ON ic.[object_id] = i.[object_id]
AND i.index_id = ic.index_id
WHERE i.is_primary_key = 1
) i ON c.[object_id] = i.[object_id] AND c.column_id = i.column_id
LEFT JOIN sys.foreign_key_columns fkc WITH(NOWAIT) ON fkc.parent_object_id = c.[object_id]
AND fkc.parent_column_id = c.column_id
WHERE c.[object_id] = OBJECT_ID('TableName')
实际上可能是重复的。重点是,这里有很多问题涉及到外键的元数据信息,只需查找
sys.foreign\u keys
和sys.foreign\u keys\u columns
,您应该可以找到很多示例。您需要处理多列FKs吗?那么(我在野外看到过)一个参与多个FK的列呢?所有的外键列在外键中只有一个表。所有的例子都是反向的。我不想知道谁在使用给定的表,我想知道该列引用了哪些表(如果有的话)。这会告诉我该列是否有外键,但我需要外键的表名。