GetForeignKeyInfo.sql 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. -- SQL Server 查询外键和索引信息的脚本
  2. -- 查询所有外键信息
  3. SELECT
  4. fk.name AS ForeignKeyName,
  5. t1.name AS TableName,
  6. c1.name AS ColumnName,
  7. t2.name AS ReferencedTableName,
  8. c2.name AS ReferencedColumnName
  9. FROM sys.foreign_keys AS fk
  10. INNER JOIN sys.foreign_key_columns AS fkc ON fk.object_id = fkc.constraint_object_id
  11. INNER JOIN sys.tables AS t1 ON fkc.parent_object_id = t1.object_id
  12. INNER JOIN sys.columns AS c1 ON fkc.parent_object_id = c1.object_id AND fkc.parent_column_id = c1.column_id
  13. INNER JOIN sys.tables AS t2 ON fkc.referenced_object_id = t2.object_id
  14. INNER JOIN sys.columns AS c2 ON fkc.referenced_object_id = c2.object_id AND fkc.referenced_column_id = c2.column_id;
  15. -- 查询所有表的索引信息
  16. SELECT
  17. t.name AS TableName,
  18. i.name AS IndexName,
  19. c.name AS ColumnName,
  20. ic.index_column_id AS ColumnPosition,
  21. i.is_unique AS IsUnique,
  22. i.is_primary_key AS IsPrimaryKey
  23. FROM sys.tables AS t
  24. INNER JOIN sys.indexes AS i ON t.object_id = i.object_id
  25. INNER JOIN sys.index_columns AS ic ON i.object_id = ic.object_id AND i.index_id = ic.index_id
  26. INNER JOIN sys.columns AS c ON ic.object_id = c.object_id AND ic.column_id = c.column_id
  27. WHERE i.type > 0 -- 忽略堆表(无聚集索引的表)
  28. ORDER BY t.name, i.name, ic.index_column_id;
  29. -- 查询主键信息(作为参考)
  30. SELECT
  31. t.name AS TableName,
  32. c.name AS ColumnName,
  33. i.name AS IndexName
  34. FROM sys.tables AS t
  35. INNER JOIN sys.indexes AS i ON t.object_id = i.object_id
  36. INNER JOIN sys.index_columns AS ic ON i.object_id = ic.object_id AND i.index_id = ic.index_id
  37. INNER JOIN sys.columns AS c ON ic.object_id = c.object_id AND ic.column_id = c.column_id
  38. WHERE i.is_primary_key = 1
  39. ORDER BY t.name, c.name;