回答

收藏

获取数据库中唯一约束和索引的列表

技术问答 技术问答 237 人阅读 | 0 人回复 | 2023-09-13

我必须获取所有唯一键约束和特定数据库索引的列表。我正在做这样的事情:
8 e2 R6 _6 T, D- OSELECT * FROM sys.sysobjects WHERE type!='u' AND name LIKE [table]* I; m8 g& m" y5 z3 N
只是想确认这是否是正确的方法,或者是否有更好的方法来做同样的事情?: @7 l- M+ _( D/ V
                * ?& p; K+ {& ?6 {. {  y% j
解决方案:
3 q! E! E+ X, w$ ^                % S( ^& l2 E% T! @
6 A# R+ `7 M, D0 m, `
2 {) W. E9 ^. z/ j5 T: h
                由于独特的约束是在幕后作为索引实现的,因此您可以直接从sys.indexes获取所有这些信息:
" l" i# i3 i* t4 GSELECT0 J* a& }8 }0 O$ u- U
  [schema] = OBJECT_SCHEMA_NAME([object_id]),
$ \8 \/ u1 m' G! D  [table]  = OBJECT_NAME([object_id]),
- g) f, _) x7 `6 d' y5 F  [index]  = name,
% ~* I, B) }- }7 r  is_unique_constraint,
7 T9 Z+ ^: u3 c2 O* X4 [2 j  is_unique,( r/ g/ A5 G5 l1 D7 I! Q
  is_primary_key
- X9 Z$ R4 e, S# j7 `0 v, yFROM sys.indexes4 W9 Z' d9 z: }
-- WHERE [object_id] = OBJECT_ID('dbo.tablename');+ |. B9 y5 u3 J5 C3 o4 E* V8 P
对所有数据库重复(大概没有针对特定表的过滤器):
' ]7 n' L1 M" i* i6 B' \) \& LDECLARE @sql NVARCHAR(MAX) = N'';- G0 H* Z  a7 l6 g! d, M
SELECT @sql += 'SELECT db = ' + name + ',* Q. D5 A% ^4 g
    [schema] = OBJECT_SCHEMA_NAME([object_id]),
; C; _! X/ D  {1 c/ v    [table]  = OBJECT_NAME([object_id]),
' p* J$ T& C9 q: I; }  n    [index]  = name, ) p: D0 A3 I! G4 C; @# t6 @1 r3 U
    is_unique_constraint,$ l- y9 |2 T6 X! f" R
    is_unique,0 {: J! d# j. c$ k
    is_primary_key
" X0 C2 e  m/ Q9 q& ?  FROM ' + QUOTENAME(name) + '.sys.indexes;'
6 l4 Y  F$ _  {: k% _7 IFROM sys.databases3 c9 @" w( b- N, u
WHERE database_id BETWEEN 4 AND 32766;
" b, A. [& k, [! S7 mEXEC sp_executesql @sql;
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则