生成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 |
|
|
|
|
|