sqlserver数据库里怎么查找一个表里的约束,要查出 约束名、列名、约束类型?用sql语句查询

sqlserver数据库里怎么查找一个表里的约束,要查出 约束名、列名、约束类型?用sql语句查询,第1张

主键约束

SELECT

tab.name AS [表名],

idx.name AS [主键名称],

col.name AS [主键列名]

FROM

sys.indexes idx

JOIN sys.index_columns idxCol

ON (idx.object_id = idxCol.object_id

AND idx.index_id = idxCol.index_id

AND idx.is_primary_key = 1)

JOIN sys.tables tab

ON (idx.object_id = tab.object_id)

JOIN sys.columns col

ON (idx.object_id = col.object_id

AND idxCol.column_id = col.column_id)

唯一约束

SELECT

tab.name AS [表名],

idx.name AS [约束名称],

col.name AS [约束列名]

FROM

sys.indexes idx

JOIN sys.index_columns idxCol

ON (idx.object_id = idxCol.object_id

AND idx.index_id = idxCol.index_id

AND idx.is_unique_constraint = 1)

JOIN sys.tables tab

ON (idx.object_id = tab.object_id)

JOIN sys.columns col

ON (idx.object_id = col.object_id

AND idxCol.column_id = col.column_id)

外键约束

select

oSub.name AS [子表名称],

fk.name AS [外键名称],

SubCol.name AS [子表列名],

oMain.name AS [主表名称],

MainCol.name AS [主表列名]

from

sys.foreign_keys fk

JOIN sys.all_objects oSub

ON (fk.parent_object_id = oSub.object_id)

JOIN sys.all_objects oMain

ON (fk.referenced_object_id = oMain.object_id)

JOIN sys.foreign_key_columns fkCols

ON (fk.object_id = fkCols.constraint_object_id)

JOIN sys.columns SubCol

ON (oSub.object_id = SubCol.object_id

AND fkCols.parent_column_id = SubCol.column_id)

JOIN sys.columns MainCol

ON (oMain.object_id = MainCol.object_id

AND fkCols.referenced_column_id = MainCol.column_id)

Check约束

SELECT

tab.name AS [表名],

chk.name AS [Check约束名],

col.name AS [列名],

chk.definition

FROM

sys.check_constraints chk

JOIN sys.tables tab

ON (chk.parent_object_id = tab.object_id)

JOIN sys.columns col

ON (chk.parent_object_id = col.object_id

AND chk.parent_column_id = col.column_id)

SELECT

  USER_CONS_COLUMNS.CONSTRAINT_NAME AS 约束名,

  USER_CONS_COLUMNS.TABLE_NAME AS 表名,

  USER_CONS_COLUMNS.COLUMN_NAME AS 列名,

  USER_CONS_COLUMNS.POSITION AS 位置,

  CONSTRAINT_TYPE,

  SEARCH_CONDITION

FROM

  USER_CONSTRAINTS

    JOIN USER_CONS_COLUMNS

    ON (USER_CONSTRAINTS.CONSTRAINT_NAME

        = USER_CONS_COLUMNS.CONSTRAINT_NAME)

WHERE

  CONSTRAINT_TYPE IN ('C', 'V', 'O')

其实主要就是看

USER_CONSTRAINTS    与   USER_CONS_COLUMNS  这2个视图.

数据库管理员的话

可以看

DBA_CONSTRAINTS    与   DBA_CONS_COLUMNS  这2个视图.


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/10043191.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存