SQL:打印表索引脚本
SQL SERVER 打印索引脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 | declare C1 cursor for -- 表索引,不包含主约束索引。 SELECT OBJ.OBJECT_ID AS [TABLE_ID], OBJ. NAME AS [TABLE_NAME], -- PK.name AS CONSTRAIN_NAME, idx. name as index_name, --索引类型: 聚集索引、非聚集索引 case WHEN idx.type = 1 then 'CLUSTERED' when idx.type=2 then 'NONCLUSTERED' ELSE '' END AS [INDEX_TYPE], CASE WHEN IDX.is_unique=1 THEN 'UNIQUE' WHEN IDX.is_unique=0 THEN '不唯一' ELSE '' END [IS_UNIQUE_DESC] -- IDXC.index_column_id, -- IDXC.key_ordinal, -- COL.name AS COLUMN_NAME -- ,IDX.* FROM SYS.all_objects OBJ, -- SYS.key_constraints PK, sys.indexes idx -- sys.index_columns idxc, -- SYS.all_columns COL WHERE OBJ.type= 'U' AND OBJ. name LIKE 'AP_Vouch%' -- AND OBJ.object_id = PK.parent_object_id -- AND PK.type='PK' -- and pk.parent_object_id = idx.object_id -- and pk.unique_index_id = idx.index_id and not exists ( select 1 from SYS.key_constraints PK where pk.parent_object_id = idx.object_id and pk.unique_index_id = idx.index_id ) and obj.object_id = idx.object_id -- AND IDX.object_id = IDXC.object_id -- and idx.index_id = idxc.index_id -- AND IDXC.object_id = COL.object_id --and IDXC.column_id = COL.column_id order by OBJ. NAME , idx. name --,IDXC.key_ordinal ; DECLARE @TABLE_ID BIGINT , @TABLE_NAME NVARCHAR(128), @INDEX_NAME NVARCHAR(128), @INDEX_TYPE NVARCHAR(128), @IS_UNIQUE_DESC NVARCHAR(128), @KEY_ORDINAL INT , @COLUMN_NAME NVARCHAR(128), @RESULT NVARCHAR(4000), @COLUMN_LIST NVARCHAR(4000), @ UNIQUE NVARCHAR(20); declare @fetch_status1 int ; declare @fetch_status_idx int ; BEGIN OPEN C1 ; FETCH NEXT FROM C1 INTO @TABLE_ID, @TABLE_NAME, @INDEX_NAME, @INDEX_TYPE,@IS_UNIQUE_DESC --, @KEY_ORDINAL ,@COLUMN_NAME; set @fetch_status1 =@@FETCH_STATUS WHILE @FETCH_STATUS1 = 0 BEGIN IF @IS_UNIQUE_DESC = 'UNIQUE' SET @ UNIQUE = ' UNIQUE ' ; ELSE SET @ UNIQUE = ' ' ; SET @COLUMN_LIST = '' ; -- 索引字段 declare c_idxc cursor for select IDXC.key_ordinal, COL. name AS COLUMN_NAME from sys.indexes idx, sys.index_columns idxc, SYS.all_columns COL where IDXC.object_id = COL.object_id and IDXC.column_id = COL.column_id AND IDX.index_id = IDXC.index_id and idxc.object_id = @table_id AND IDX. name = @INDEX_NAME ORDER BY IDXC.key_ordinal; open c_idxc ; fetch next from c_idxc into @key_ordinal, @column_name set @fetch_status_idx = @@FETCH_STATUS while @fetch_status_idx = 0 begin set @COLUMN_LIST = @COLUMN_LIST + @COLUMN_NAME + ',' ; fetch next from c_idxc into @key_ordinal, @column_name set @fetch_status_idx = @@FETCH_STATUS end ; close c_idxc; deallocate c_idxc; IF @COLUMN_LIST!= '' SET @COLUMN_LIST = LEFT (@COLUMN_LIST,LEN(@COLUMN_LIST)-1); SET @RESULT= 'CREATE ' + @ UNIQUE + @INDEX_TYPE + ' INDEX ' + @INDEX_NAME + ' ON ' + @TABLE_NAME + '( ' + @COLUMN_LIST + ' );' + CHAR (13); PRINT @RESULT; -- PRINT 'GO'; FETCH NEXT FROM C1 INTO @TABLE_ID, @TABLE_NAME, @INDEX_NAME, @INDEX_TYPE,@IS_UNIQUE_DESC --, @KEY_ORDINAL ,@COLUMN_NAME ; set @fetch_status1 = @@FETCH_STATUS; END ; CLOSE C1; DEALLOCATE C1; END ; |
优质生活从拆开始
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了