回答

收藏

生成SQL Server数据库中所有索引和键的脚本

技术问答 技术问答 252 人阅读 | 0 人回复 | 2023-09-14

我正在寻找生成类似的脚本:3 D9 U+ ?" K' |6 k; j! g
ALTER TABLE dbo.Person     ADD CONSTRAINT PK_Person PRIMARY KEY CLUSTERED (PersonID);    CREATE INDEX IX_EVT_EVENTS on EVT_EVENTS(prg_event_t1,prg_event_t2,num_order)主要问题是我找不到我需要的所有信息,比如以下查询:
1 n& _: J  [' F1 U% QSELECT t.name TableName,I.* FROM sys.indexes I Inner Join sys.tables T on i.object_id=t.object_id返回所有关于键和索引的信息,但..没有列名,我在哪里能得到它们?+ k1 X' A: g- S
我也尝试了sys.all_columns和sys.key_constraints。+ X0 T( ?: m% `" K; c3 g7 q
                                                                # U) v* }" B1 r8 J9 G
    解决方案:                                                               
- t/ A  p& ^; [$ G) _( Y* V                                                                存储列名sys.columns和sys.index_columns表中。5 ?% d  s6 G5 Z
从所有表格中选择名称:
) J$ k) e" D. R& ?% M9 zSELECT  sc.nameFROM    sys.tables st        INNER JOIN sys.columns sc ON sc.OBJECT_ID = st.OBJECT_IDWHERE   st.OBJECT_ID = 'ObjectID'或与sys.indexes表将选择表名和列:% u% k6 |' M0 n
SELECT  st.name ,        sc.nameFROM    sys.indexes si        INNER JOIN sys.tables st ON si.object_id = st.object_id        INNER JOIN sys.columns sc ON sc.OBJECT_ID = st.OBJECT_ID您可以WHERE添加一个子句以过滤索引列
2 P$ E7 d$ e( q5 x6 {" j; bSELECT  si.name ,        st.name ,        sc.nameFROM    sys.indexes si        INNER JOIN sys.tables st ON si.object_id = st.object_id        INNER JOIN sys.columns sc ON sc.OBJECT_ID = st.OBJECT_IDWHERE   si.name = 'IX_EVT_EVENTS
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则