时间:2021-07-01 10:21:17 帮助过:7人阅读
方法二:(未验证可行性 转自: https://blog.csdn.net/iteye_18688/article/details/81717229)
- /*
调用方法: exec p_helpindex ‘tb_test‘
-----drop proc p_helpindex
- <em id="__mceDel">*/</em>
- <span style="color: #0000ff;"><br>CREATE</span> <span style="color: #0000ff;">PROC</span><span style="color: #000000;"> p_helpindex
- </span><span style="color: #008000;">@tbname</span> sysname <span style="color: #808080;">=</span> <span style="color: #ff0000;">‘‘</span><span style="color: #000000;"> ,
- </span><span style="color: #008000;">@CLUSTERED</span> <span style="color: #0000ff;">INT</span> <span style="color: #808080;">=</span> <span style="color: #ff0000;">‘</span><span style="color: #ff0000;">1</span><span style="color: #ff0000;">‘</span>
- <span style="color: #0000ff;">AS</span> <span style="color: #008080;">--</span><span style="color: #008080;">生成索引信息及索引创建脚本(Sql Server 2000)</span>
- <span style="color: #0000ff;">IF</span> <span style="color: #008000;">@tbname</span> <span style="color: #0000ff;">IS</span> <span style="color: #0000ff;">NULL</span>
- <span style="color: #808080;">OR</span> <span style="color: #008000;">@tbname</span> <span style="color: #808080;">=</span> <span style="color: #ff0000;">‘‘</span>
- <span style="color: #0000ff;">RETURN</span> <span style="color: #808080;">-</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">;
- </span><span style="color: #0000ff;">DECLARE</span> <span style="color: #008000;">@t</span> <span style="color: #0000ff;">TABLE</span><span style="color: #000000;">
- (
- table_name </span><span style="color: #0000ff;">NVARCHAR</span>(<span style="color: #800000; font-weight: bold;">100</span><span style="color: #000000;">) ,
- schema_name </span><span style="color: #0000ff;">NVARCHAR</span>(<span style="color: #800000; font-weight: bold;">100</span><span style="color: #000000;">) ,
- fill_factor </span><span style="color: #0000ff;">INT</span><span style="color: #000000;"> ,
- is_padded </span><span style="color: #0000ff;">INT</span><span style="color: #000000;"> ,
- ix_name </span><span style="color: #0000ff;">NVARCHAR</span>(<span style="color: #800000; font-weight: bold;">100</span><span style="color: #000000;">) ,
- type </span><span style="color: #0000ff;">INT</span><span style="color: #000000;"> ,
- keyno </span><span style="color: #0000ff;">INT</span><span style="color: #000000;"> ,
- column_name </span><span style="color: #0000ff;">NVARCHAR</span>(<span style="color: #800000; font-weight: bold;">200</span><span style="color: #000000;">) ,
- cluster </span><span style="color: #0000ff;">VARCHAR</span>(<span style="color: #800000; font-weight: bold;">20</span><span style="color: #000000;">) ,
- ignore_dupkey </span><span style="color: #0000ff;">VARCHAR</span>(<span style="color: #800000; font-weight: bold;">20</span><span style="color: #000000;">) ,
- </span><span style="color: #ff0000;">[</span><span style="color: #ff0000;">unique</span><span style="color: #ff0000;">]</span> <span style="color: #0000ff;">VARCHAR</span>(<span style="color: #800000; font-weight: bold;">20</span><span style="color: #000000;">) ,
- groupfile </span><span style="color: #0000ff;">VARCHAR</span>(<span style="color: #800000; font-weight: bold;">10</span><span style="color: #000000;">)
- );
- </span><span style="color: #0000ff;">DECLARE</span> <span style="color: #008000;">@table_name</span> <span style="color: #0000ff;">NVARCHAR</span>(<span style="color: #800000; font-weight: bold;">100</span><span style="color: #000000;">) ,
- </span><span style="color: #008000;">@schema_name</span> <span style="color: #0000ff;">NVARCHAR</span>(<span style="color: #800000; font-weight: bold;">100</span><span style="color: #000000;">) ,
- </span><span style="color: #008000;">@fill_factor</span> <span style="color: #0000ff;">INT</span><span style="color: #000000;"> ,
- </span><span style="color: #008000;">@is_padded</span> <span style="color: #0000ff;">INT</span><span style="color: #000000;"> ,
- </span><span style="color: #008000;">@ix_name</span> <span style="color: #0000ff;">NVARCHAR</span>(<span style="color: #800000; font-weight: bold;">100</span><span style="color: #000000;">) ,
- </span><span style="color: #008000;">@ix_name_old</span> <span style="color: #0000ff;">NVARCHAR</span>(<span style="color: #800000; font-weight: bold;">100</span><span style="color: #000000;">) ,
- </span><span style="color: #008000;">@type</span> <span style="color: #0000ff;">INT</span><span style="color: #000000;"> ,
- </span><span style="color: #008000;">@keyno</span> <span style="color: #0000ff;">INT</span><span style="color: #000000;"> ,
- </span><span style="color: #008000;">@column_name</span> <span style="color: #0000ff;">NVARCHAR</span>(<span style="color: #800000; font-weight: bold;">100</span>) ,<span style="color: #008080;">--</span><span style="color: #008080;">@column_name_temp nvarchar(500),</span>
- <span style="color: #008000;">@cluster</span> <span style="color: #0000ff;">VARCHAR</span>(<span style="color: #800000; font-weight: bold;">20</span><span style="color: #000000;">) ,
- </span><span style="color: #008000;">@ignore_dupkey</span> <span style="color: #0000ff;">VARCHAR</span>(<span style="color: #800000; font-weight: bold;">20</span><span style="color: #000000;">) ,
- </span><span style="color: #008000;">@unique</span> <span style="color: #0000ff;">VARCHAR</span>(<span style="color: #800000; font-weight: bold;">20</span><span style="color: #000000;">) ,
- </span><span style="color: #008000;">@groupfile</span> <span style="color: #0000ff;">VARCHAR</span>(<span style="color: #800000; font-weight: bold;">10</span><span style="color: #000000;">);
- </span><span style="color: #0000ff;">DECLARE</span> ms_crs_ind <span style="color: #0000ff;">CURSOR</span><span style="color: #000000;"> LOCAL STATIC
- </span><span style="color: #0000ff;">FOR</span>
- <span style="color: #0000ff;">SELECT</span>
- <span style="color: #0000ff;">DISTINCT</span> table_name <span style="color: #808080;">=</span><span style="color: #000000;"> a.name ,
- schema_name </span><span style="color: #808080;">=</span><span style="color: #000000;"> b.name ,
- fill_factor </span><span style="color: #808080;">=</span><span style="color: #000000;"> c.OrigFillFactor ,
- is_padded </span><span style="color: #808080;">=</span> <span style="color: #ff00ff;">CASE</span> <span style="color: #0000ff;">WHEN</span> c.status <span style="color: #808080;">=</span> <span style="color: #800000; font-weight: bold;">256</span> <span style="color: #0000ff;">THEN</span> <span style="color: #800000; font-weight: bold;">1</span>
- <span style="color: #0000ff;">ELSE</span> <span style="color: #800000; font-weight: bold;">0</span>
- <span style="color: #0000ff;">END</span><span style="color: #000000;"> ,
- ix_name </span><span style="color: #808080;">=</span><span style="color: #000000;"> c.name ,
- type </span><span style="color: #808080;">=</span><span style="color: #000000;"> c.indid ,
- d.keyno ,
- column_name </span><span style="color: #808080;">=</span><span style="color: #000000;"> e.name
- </span><span style="color: #808080;">+</span> <span style="color: #ff00ff;">CASE</span> <span style="color: #0000ff;">WHEN</span><span style="color: #000000;"> INDEXKEY_PROPERTY(a.id, c.indid, d.keyno,
- </span><span style="color: #ff0000;">‘</span><span style="color: #ff0000;">isdescending</span><span style="color: #ff0000;">‘</span>) <span style="color: #808080;">=</span> <span style="color: #800000; font-weight: bold;">1</span>
- <span style="color: #0000ff;">THEN</span> <span style="color: #ff0000;">‘</span><span style="color: #ff0000;"> desc </span><span style="color: #ff0000;">‘</span>
- <span style="color: #0000ff;">ELSE</span> <span style="color: #ff0000;">‘‘</span>
- <span style="color: #0000ff;">END</span><span style="color: #000000;"> ,
- </span><span style="color: #ff00ff;">CASE</span> <span style="color: #0000ff;">WHEN</span> ( c.status <span style="color: #808080;">&</span> <span style="color: #800000; font-weight: bold;">16</span> ) <span style="color: #808080;"><></span> <span style="color: #800000; font-weight: bold;">0</span> <span style="color: #0000ff;">THEN</span> <span style="color: #ff0000;">‘</span><span style="color: #ff0000;">clustered</span><span style="color: #ff0000;">‘</span>
- <span style="color: #0000ff;">ELSE</span> <span style="color: #ff0000;">‘</span><span style="color: #ff0000;">nonclustered</span><span style="color: #ff0000;">‘</span>
- <span style="color: #0000ff;">END</span><span style="color: #000000;"> ,
- </span><span style="color: #ff00ff;">CASE</span> <span style="color: #0000ff;">WHEN</span> ( c.status <span style="color: #808080;">&</span> <span style="color: #800000; font-weight: bold;">1</span> ) <span style="color: #808080;"><></span> <span style="color: #800000; font-weight: bold;">0</span> <span style="color: #0000ff;">THEN</span> <span style="color: #ff0000;">‘</span><span style="color: #ff0000;">IGNORE_DUP_KEY</span><span style="color: #ff0000;">‘</span>
- <span style="color: #0000ff;">ELSE</span> <span style="color: #ff0000;">‘‘</span>
- <span style="color: #0000ff;">END</span><span style="color: #000000;"> ,
- </span><span style="color: #ff00ff;">CASE</span> <span style="color: #0000ff;">WHEN</span> ( c.status <span style="color: #808080;">&</span> <span style="color: #800000; font-weight: bold;">2</span> ) <span style="color: #808080;"><></span> <span style="color: #800000; font-weight: bold;">0</span> <span style="color: #0000ff;">THEN</span> <span style="color: #ff0000;">‘</span><span style="color: #ff0000;">unique</span><span style="color: #ff0000;">‘</span>
- <span style="color: #0000ff;">ELSE</span> <span style="color: #ff0000;">‘‘</span>
- <span style="color: #0000ff;">END</span><span style="color: #000000;"> ,
- g.groupname
- </span><span style="color: #0000ff;">FROM</span><span style="color: #000000;"> sysobjects a
- </span><span style="color: #0000ff;">INNER</span> <span style="color: #808080;">JOIN</span> sysusers b <span style="color: #0000ff;">ON</span> a.uid <span style="color: #808080;">=</span><span style="color: #000000;"> b.uid
- </span><span style="color: #0000ff;">INNER</span> <span style="color: #808080;">JOIN</span> sysindexes c <span style="color: #0000ff;">ON</span> a.id <span style="color: #808080;">=</span><span style="color: #000000;"> c.id
- </span><span style="color: #0000ff;">INNER</span> <span style="color: #808080;">JOIN</span> sysindexkeys d <span style="color: #0000ff;">ON</span> a.id <span style="color: #808080;">=</span><span style="color: #000000;"> d.id
- </span><span style="color: #808080;">AND</span> c.indid <span style="color: #808080;">=</span><span style="color: #000000;"> d.indid
- </span><span style="color: #0000ff;">INNER</span> <span style="color: #808080;">JOIN</span> syscolumns e <span style="color: #0000ff;">ON</span> a.id <span style="color: #808080;">=</span><span style="color: #000000;"> e.id
- </span><span style="color: #808080;">AND</span> d.colid <span style="color: #808080;">=</span><span style="color: #000000;"> e.colid
- </span><span style="color: #0000ff;">INNER</span> <span style="color: #808080;">JOIN</span> sysfilegroups g <span style="color: #0000ff;">ON</span> g.groupid <span style="color: #808080;">=</span><span style="color: #000000;"> c.groupid
- </span><span style="color: #808080;">LEFT</span> <span style="color: #808080;">JOIN</span> master.dbo.spt_values f <span style="color: #0000ff;">ON</span> f.<span style="color: #0000ff;">number</span> <span style="color: #808080;">=</span><span style="color: #000000;"> c.status
- </span><span style="color: #808080;">AND</span> f.type <span style="color: #808080;">=</span> <span style="color: #ff0000;">‘</span><span style="color: #ff0000;">I</span><span style="color: #ff0000;">‘</span>
- <span style="color: #0000ff;">WHERE</span> a.id <span style="color: #808080;">=</span> <span style="color: #ff00ff;">OBJECT_ID</span>(<span style="color: #008000;">@tbname</span><span style="color: #000000;">)
- </span><span style="color: #808080;">AND</span> c.indid <span style="color: #808080;"><</span> <span style="color: #800000; font-weight: bold;">255</span>
- <span style="color: #808080;">AND</span> ( c.status <span style="color: #808080;">&</span> <span style="color: #800000; font-weight: bold;">64</span> ) <span style="color: #808080;">=</span> <span style="color: #800000; font-weight: bold;">0</span>
- <span style="color: #808080;">AND</span> c.indid <span style="color: #808080;">>=</span> <span style="color: #008000;">@CLUSTERED</span>
- <span style="color: #0000ff;">ORDER</span> <span style="color: #0000ff;">BY</span><span style="color: #000000;"> c.indid ,
- d.keyno;
- </span><span style="color: #0000ff;">OPEN</span><span style="color: #000000;"> ms_crs_ind;
- </span><span style="color: #0000ff;">FETCH</span> ms_crs_ind <span style="color: #0000ff;">INTO</span> <span style="color: #008000;">@table_name</span>, <span style="color: #008000;">@schema_name</span>, <span style="color: #008000;">@fill_factor</span>, <span style="color: #008000;">@is_padded</span><span style="color: #000000;">,
- </span><span style="color: #008000;">@ix_name</span>, <span style="color: #008000;">@type</span>, <span style="color: #008000;">@keyno</span>, <span style="color: #008000;">@column_name</span>, <span style="color: #008000;">@cluster</span>, <span style="color: #008000;">@ignore_dupkey</span><span style="color: #000000;">,
- </span><span style="color: #008000;">@unique</span>, <span style="color: #008000;">@groupfile</span><span style="color: #000000;">;
- </span><span style="color: #0000ff;">IF</span> <span style="color: #008000; font-weight: bold;">@@fetch_status</span> <span style="color: #808080;"><</span> <span style="color: #800000; font-weight: bold;">0</span>
- <span style="color: #0000ff;">BEGIN</span>
- <span style="color: #0000ff;">DEALLOCATE</span><span style="color: #000000;"> ms_crs_ind;
- </span><span style="color: #0000ff;">RAISERROR</span>(<span style="color: #800000; font-weight: bold;">15472</span>,<span style="color: #808080;">-</span><span style="color: #800000; font-weight: bold;">1</span>,<span style="color: #808080;">-</span><span style="color: #800000; font-weight: bold;">1</span>); <span style="color: #008080;">--</span><span style="color: #008080;">‘Object does not have any indexes.‘--无效索引(即没有键列的索引)</span>
- <span style="color: #0000ff;">RETURN</span> <span style="color: #808080;">-</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">;
- </span><span style="color: #0000ff;">END</span><span style="color: #000000;">;
- </span><span style="color: #0000ff;">WHILE</span> <span style="color: #008000; font-weight: bold;">@@fetch_status</span> <span style="color: #808080;">>=</span> <span style="color: #800000; font-weight: bold;">0</span>
- <span style="color: #0000ff;">BEGIN</span>
- <span style="color: #0000ff;">IF</span> <span style="color: #808080;">EXISTS</span> ( <span style="color: #0000ff;">SELECT</span> <span style="color: #800000; font-weight: bold;">1</span>
- <span style="color: #0000ff;">FROM</span> <span style="color: #008000;">@t</span>
- <span style="color: #0000ff;">WHERE</span> ix_name <span style="color: #808080;">=</span> <span style="color: #008000;">@ix_name</span><span style="color: #000000;"> )
- </span><span style="color: #0000ff;">UPDATE</span> <span style="color: #008000;">@t</span>
- <span style="color: #0000ff;">SET</span> column_name <span style="color: #808080;">=</span> column_name <span style="color: #808080;">+</span> <span style="color: #ff0000;">‘</span><span style="color: #ff0000;">,</span><span style="color: #ff0000;">‘</span> <span style="color: #808080;">+</span> <span style="color: #008000;">@column_name</span>
- <span style="color: #0000ff;">WHERE</span> ix_name <span style="color: #808080;">=</span> <span style="color: #008000;">@ix_name</span><span style="color: #000000;">;
- </span><span style="color: #0000ff;">ELSE</span>
- <span style="color: #0000ff;">INSERT</span> <span style="color: #0000ff;">INTO</span> <span style="color: #008000;">@t</span>
- <span style="color: #0000ff;">SELECT</span> <span style="color: #008000;">@table_name</span><span style="color: #000000;"> ,
- </span><span style="color: #008000;">@schema_name</span><span style="color: #000000;"> ,
- </span><span style="color: #008000;">@fill_factor</span><span style="color: #000000;"> ,
- </span><span style="color: #008000;">@is_padded</span><span style="color: #000000;"> ,
- </span><span style="color: #008000;">@ix_name</span><span style="color: #000000;"> ,
- </span><span style="color: #008000;">@type</span><span style="color: #000000;"> ,
- </span><span style="color: #008000;">@keyno</span><span style="color: #000000;"> ,
- </span><span style="color: #008000;">@column_name</span><span style="color: #000000;"> ,
- </span><span style="color: #008000;">@cluster</span><span style="color: #000000;"> ,
- </span><span style="color: #008000;">@ignore_dupkey</span><span style="color: #000000;"> ,
- </span><span style="color: #008000;">@unique</span><span style="color: #000000;"> ,
- </span><span style="color: #008000;">@groupfile</span><span style="color: #000000;">;
- </span><span style="color: #0000ff;">FETCH</span> ms_crs_ind <span style="color: #0000ff;">INTO</span> <span style="color: #008000;">@table_name</span>, <span style="color: #008000;">@schema_name</span>, <span style="color: #008000;">@fill_factor</span><span style="color: #000000;">,
- </span><span style="color: #008000;">@is_padded</span>, <span style="color: #008000;">@ix_name</span>, <span style="color: #008000;">@type</span>, <span style="color: #008000;">@keyno</span>, <span style="color: #008000;">@column_name</span>, <span style="color: #008000;">@cluster</span><span style="color: #000000;">,
- </span><span style="color: #008000;">@ignore_dupkey</span>, <span style="color: #008000;">@unique</span>, <span style="color: #008000;">@groupfile</span><span style="color: #000000;">;
- </span><span style="color: #0000ff;">END</span><span style="color: #000000;">;
- </span><span style="color: #0000ff;">DEALLOCATE</span><span style="color: #000000;"> ms_crs_ind;
- </span><span style="color: #0000ff;">SELECT</span> <span style="color: #ff0000;">‘</span><span style="color: #ff0000;">CREATE </span><span style="color: #ff0000;">‘</span> <span style="color: #808080;">+</span> <span style="color: #ff00ff;">UPPER</span>(<span style="color: #ff0000;">[</span><span style="color: #ff0000;">unique</span><span style="color: #ff0000;">]</span>) <span style="color: #808080;">+</span> <span style="color: #ff00ff;">CASE</span> <span style="color: #0000ff;">WHEN</span> <span style="color: #ff0000;">[</span><span style="color: #ff0000;">unique</span><span style="color: #ff0000;">]</span> <span style="color: #808080;">=</span> <span style="color: #ff0000;">‘‘</span> <span style="color: #0000ff;">THEN</span> <span style="color: #ff0000;">‘‘</span>
- <span style="color: #0000ff;">ELSE</span> <span style="color: #ff0000;">‘</span> <span style="color: #ff0000;">‘</span>
- <span style="color: #0000ff;">END</span> <span style="color: #808080;">+</span> <span style="color: #ff00ff;">UPPER</span>(cluster) <span style="color: #808080;">+</span> <span style="color: #ff0000;">‘</span><span style="color: #ff0000;"> INDEX </span><span style="color: #ff0000;">‘</span>
- <span style="color: #808080;">+</span> ix_name <span style="color: #808080;">+</span> <span style="color: #ff0000;">‘</span><span style="color: #ff0000;"> ON </span><span style="color: #ff0000;">‘</span> <span style="color: #808080;">+</span> table_name <span style="color: #808080;">+</span> <span style="color: #ff0000;">‘</span><span style="color: #ff0000;">(</span><span style="color: #ff0000;">‘</span> <span style="color: #808080;">+</span> column_name <span style="color: #808080;">+</span> <span style="color: #ff0000;">‘</span><span style="color: #ff0000;">)</span><span style="color: #ff0000;">‘</span>
- <span style="color: #808080;">+</span> <span style="color: #ff00ff;">CASE</span> <span style="color: #0000ff;">WHEN</span> fill_factor <span style="color: #808080;">></span> <span style="color: #800000; font-weight: bold;">0</span>
- <span style="color: #808080;">OR</span> is_padded <span style="color: #808080;">=</span> <span style="color: #800000; font-weight: bold;">1</span>
- <span style="color: #808080;">OR</span> ( <span style="color: #ff00ff;">UPPER</span>(cluster) <span style="color: #808080;">!=</span> <span style="color: #ff0000;">‘</span><span style="color: #ff0000;">NONCLUSTERED</span><span style="color: #ff0000;">‘</span>
- <span style="color: #808080;">AND</span> ignore_dupkey <span style="color: #808080;">=</span> <span style="color: #ff0000;">‘</span><span style="color: #ff0000;">IGNORE_DUP_KEY</span><span style="color: #ff0000;">‘</span><span style="color: #000000;">
- )
- </span><span style="color: #0000ff;">THEN</span> <span style="color: #ff0000;">‘</span><span style="color: #ff0000;"> WITH </span><span style="color: #ff0000;">‘</span> <span style="color: #808080;">+</span> <span style="color: #ff00ff;">CASE</span> <span style="color: #0000ff;">WHEN</span> is_padded <span style="color: #808080;">=</span> <span style="color: #800000; font-weight: bold;">1</span> <span style="color: #0000ff;">THEN</span> <span style="color: #ff0000;">‘</span><span style="color: #ff0000;">PAD_INDEX,</span><span style="color: #ff0000;">‘</span>
- <span style="color: #0000ff;">ELSE</span> <span style="color: #ff0000;">‘‘</span>
- <span style="color: #0000ff;">END</span>
- <span style="color: #808080;">+</span> <span style="color: #ff00ff;">CASE</span> <span style="color: #0000ff;">WHEN</span> fill_factor <span style="color: #808080;">></span> <span style="color: #800000; font-weight: bold;">0</span>
- <span style="color: #0000ff;">THEN</span> <span style="color: #ff0000;">‘</span><span style="color: #ff0000;">FILLFACTOR =</span><span style="color: #ff0000;">‘</span> <span style="color: #808080;">+</span> <span style="color: #ff00ff;">LTRIM</span><span style="color: #000000;">(fill_factor)
- </span><span style="color: #0000ff;">ELSE</span> <span style="color: #ff0000;">‘‘</span>
- <span style="color: #0000ff;">END</span>
- <span style="color: #808080;">+</span> <span style="color: #ff00ff;">CASE</span> <span style="color: #0000ff;">WHEN</span> ignore_dupkey <span style="color: #808080;">=</span> <span style="color: #ff0000;">‘</span><span style="color: #ff0000;">IGNORE_DUP_KEY</span><span style="color: #ff0000;">‘</span>
- <span style="color: #808080;">AND</span> <span style="color: #ff00ff;">UPPER</span>(cluster) <span style="color: #808080;">=</span> <span style="color: #ff0000;">‘</span><span style="color: #ff0000;">NONCLUSTERED</span><span style="color: #ff0000;">‘</span>
- <span style="color: #0000ff;">THEN</span> <span style="color: #ff00ff;">CASE</span> <span style="color: #0000ff;">WHEN</span> ( fill_factor <span style="color: #808080;">></span> <span style="color: #800000; font-weight: bold;">0</span>
- <span style="color: #808080;">OR</span> is_padded <span style="color: #808080;">=</span> <span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">
- ) </span><span style="color: #0000ff;">THEN</span> <span style="color: #ff0000;">‘</span><span style="color: #ff0000;">,IGNORE_DUP_KEY</span><span style="color: #ff0000;">‘</span>
- <span style="color: #0000ff;">ELSE</span> <span style="color: #ff0000;">‘</span><span style="color: #ff0000;">,IGNORE_DUP_KEY</span><span style="color: #ff0000;">‘</span>
- <span style="color: #0000ff;">END</span>
- <span style="color: #0000ff;">ELSE</span> <span style="color: #ff0000;">‘‘</span>
- <span style="color: #0000ff;">END</span>
- <span style="color: #0000ff;">ELSE</span> <span style="color: #ff0000;">‘‘</span>
- <span style="color: #0000ff;">END</span> <span style="color: #808080;">+</span> <span style="color: #ff0000;">‘</span><span style="color: #ff0000;"> ON [</span><span style="color: #ff0000;">‘</span> <span style="color: #808080;">+</span> groupfile <span style="color: #808080;">+</span> <span style="color: #ff0000;">‘</span><span style="color: #ff0000;">]</span><span style="color: #ff0000;">‘</span> <span style="color: #0000ff;">AS</span><span style="color: #000000;"> col
- </span><span style="color: #0000ff;">FROM</span> <span style="color: #008000;">@t</span><span style="color: #000000;">;
- </span><span style="color: #0000ff;">RETURN</span> <span style="color: #800000; font-weight: bold;">0</span><span style="color: #000000;">;
- </span><span style="color: #0000ff;">GO</span>
方法三:(未验证可行性 转自:https://www.cnblogs.com/yy3b2007com/p/4541405.html)
- <span style="color: #008080;">--</span><span style="color: #008080;">1. get all indexes from current db, place in temp table</span><span style="color: #008080;">
- --</span><span style="color: #008080;">一。从当前数据库中获取所有索引,放到临时表中</span>
- <span style="color: #0000ff;">SELECT</span> schemaName <span style="color: #808080;">=</span><span style="color: #000000;"> s.name ,
- tablename </span><span style="color: #808080;">=</span> <span style="color: #ff00ff;">OBJECT_NAME</span><span style="color: #000000;">(i.id) ,
- tableid </span><span style="color: #808080;">=</span><span style="color: #000000;"> i.id ,
- indexid </span><span style="color: #808080;">=</span><span style="color: #000000;"> i.indid ,
- indexname </span><span style="color: #808080;">=</span><span style="color: #000000;"> i.name ,
- i.status ,
- isunique </span><span style="color: #808080;">=</span> <span style="color: #ff00ff;">INDEXPROPERTY</span>(i.id, i.name, <span style="color: #ff0000;">‘</span><span style="color: #ff0000;">isunique</span><span style="color: #ff0000;">‘</span><span style="color: #000000;">) ,
- isclustered </span><span style="color: #808080;">=</span> <span style="color: #ff00ff;">INDEXPROPERTY</span>(i.id, i.name, <span style="color: #ff0000;">‘</span><span style="color: #ff0000;">isclustered</span><span style="color: #ff0000;">‘</span><span style="color: #000000;">) ,
- indexfillfactor </span><span style="color: #808080;">=</span> <span style="color: #ff00ff;">INDEXPROPERTY</span>(i.id, i.name, <span style="color: #ff0000;">‘</span><span style="color: #ff0000;">indexfillfactor</span><span style="color: #ff0000;">‘</span><span style="color: #000000;">)
- </span><span style="color: #0000ff;">INTO</span><span style="color: #000000;"> #tmp_indexes
- </span><span style="color: #0000ff;">FROM</span><span style="color: #000000;"> sysindexes i
- </span><span style="color: #0000ff;">INNER</span> <span style="color: #808080;">JOIN</span> sys.tables t <span style="color: #0000ff;">ON</span> i.id <span style="color: #808080;">=</span> t.<span style="color: #ff00ff;">object_id</span>
- <span style="color: #0000ff;">INNER</span> <span style="color: #808080;">JOIN</span> sys.schemas s <span style="color: #0000ff;">ON</span> t.schema_id <span style="color: #808080;">=</span><span style="color: #000000;"> s.schema_id
- </span><span style="color: #0000ff;">WHERE</span> i.indid <span style="color: #808080;">></span> <span style="color: #800000; font-weight: bold;">0</span>
- <span style="color: #808080;">AND</span> i.indid <span style="color: #808080;"><</span> <span style="color: #800000; font-weight: bold;">255</span> <span style="color: #008080;">--</span><span style="color: #008080;">not certain about this</span>
- <span style="color: #808080;">AND</span> ( i.status <span style="color: #808080;">&</span> <span style="color: #800000; font-weight: bold;">64</span> ) <span style="color: #808080;">=</span> <span style="color: #800000; font-weight: bold;">0</span><span style="color: #000000;">;
- </span><span style="color: #008080;">--</span><span style="color: #008080;">existing indexes --现有索引</span>
- <span style="color: #008080;">--</span><span style="color: #008080;">add additional columns to store include and key column lists</span><span style="color: #008080;">
- --</span><span style="color: #008080;">添加其他列以存储包含列和键列列表</span>
- <span style="color: #0000ff;">ALTER</span> <span style="color: #0000ff;">TABLE</span> #tmp_indexes <span style="color: #0000ff;">ADD</span> keycolumns <span style="color: #0000ff;">VARCHAR</span>(<span style="color: #800000; font-weight: bold;">4000</span>), includes <span style="color: #0000ff;">VARCHAR</span>(<span style="color: #800000; font-weight: bold;">4000</span><span style="color: #000000;">);
- </span><span style="color: #0000ff;">GO</span>
- <span style="color: #008080;">--</span><span style="color: #008080;">################################################################################################</span><span style="color: #008080;">
- --</span><span style="color: #008080;">2. loop through tables, put include and index columns into variables</span><span style="color: #008080;">
- --</span><span style="color: #008080;">2。遍历表,将include和index列放入变量中</span>
- <span style="color: #0000ff;">DECLARE</span> <span style="color: #008000;">@isql_key</span> <span style="color: #0000ff;">VARCHAR</span>(<span style="color: #800000; font-weight: bold;">4000</span><span style="color: #000000;">) ,
- </span><span style="color: #008000;">@isql_incl</span> <span style="color: #0000ff;">VARCHAR</span>(<span style="color: #800000; font-weight: bold;">4000</span><span style="color: #000000;">) ,
- </span><span style="color: #008000;">@tableid</span> <span style="color: #0000ff;">INT</span><span style="color: #000000;"> ,
- </span><span style="color: #008000;">@indexid</span> <span style="color: #0000ff;">INT</span><span style="color: #000000;">;
- </span><span style="color: #0000ff;">DECLARE</span> index_cursor <span style="color: #0000ff;">CURSOR</span>
- <span style="color: #0000ff;">FOR</span>
- <span style="color: #0000ff;">SELECT</span><span style="color: #000000;"> tableid ,
- indexid
- </span><span style="color: #0000ff;">FROM</span><span style="color: #000000;"> #tmp_indexes;
- </span><span style="color: #0000ff;">OPEN</span><span style="color: #000000;"> index_cursor;
- </span><span style="color: #0000ff;">FETCH</span> <span style="color: #0000ff;">NEXT</span> <span style="color: #0000ff;">FROM</span> index_cursor <span style="color: #0000ff;">INTO</span> <span style="color: #008000;">@tableid</span>, <span style="color: #008000;">@indexid</span><span style="color: #000000;">;
- </span><span style="color: #0000ff;">WHILE</span> <span style="color: #008000; font-weight: bold;">@@fetch_status</span> <span style="color: #808080;"><></span> <span style="color: #808080;">-</span><span style="color: #800000; font-weight: bold;">1</span>
- <span style="color: #0000ff;">BEGIN</span>
- <span style="color: #0000ff;">SELECT</span> <span style="color: #008000;">@isql_key</span> <span style="color: #808080;">=</span> <span style="color: #ff0000;">‘‘</span><span style="color: #000000;"> ,
- </span><span style="color: #008000;">@isql_incl</span> <span style="color: #808080;">=</span> <span style="color: #ff0000;">‘‘</span><span style="color: #000000;">;
- </span><span style="color: #0000ff;">SELECT</span> <span style="color: #008080;">--</span><span style="color: #008080;">i.name, sc.colid, sc.name, ic.index_id, ic.object_id, *</span><span style="color: #008080;">
- --</span><span style="color: #008080;">key column</span>
- <span style="color: #008000;">@isql_key</span> <span style="color: #808080;">=</span> <span style="color: #ff00ff;">CASE</span><span style="color: #000000;"> ic.is_included_column
- </span><span style="color: #0000ff;">WHEN</span> <span style="color: #800000; font-weight: bold;">0</span>
- <span style="color: #0000ff;">THEN</span> <span style="color: #ff00ff;">CASE</span><span style="color: #000000;"> ic.is_descending_key
- </span><span style="color: #0000ff;">WHEN</span> <span style="color: #800000; font-weight: bold;">1</span>
- <span style="color: #0000ff;">THEN</span> <span style="color: #008000;">@isql_key</span> <span style="color: #808080;">+</span> <span style="color: #ff00ff;">COALESCE</span>(sc.name, <span style="color: #ff0000;">‘‘</span><span style="color: #000000;">)
- </span><span style="color: #808080;">+</span> <span style="color: #ff0000;">‘</span><span style="color: #ff0000;"> DESC, </span><span style="color: #ff0000;">‘</span>
- <span style="color: #0000ff;">ELSE</span> <span style="color: #008000;">@isql_key</span> <span style="color: #808080;">+</span> <span style="color: #ff00ff;">COALESCE</span>(sc.name, <span style="color: #ff0000;">‘‘</span><span style="color: #000000;">)
- </span><span style="color: #808080;">+</span> <span style="color: #ff0000;">‘</span><span style="color: #ff0000;"> ASC, </span><span style="color: #ff0000;">‘</span>
- <span style="color: #0000ff;">END</span>
- <span style="color: #0000ff;">ELSE</span> <span style="color: #008000;">@isql_key</span>
- <span style="color: #0000ff;">END</span><span style="color: #000000;"> ,
- </span><span style="color: #008080;">--</span><span style="color: #008080;">include column</span>
- <span style="color: #008000;">@isql_incl</span> <span style="color: #808080;">=</span> <span style="color: #ff00ff;">CASE</span><span style="color: #000000;"> ic.is_included_column
- </span><span style="color: #0000ff;">WHEN</span> <span style="color: #800000; font-weight: bold;">1</span>
- <span style="color: #0000ff;">THEN</span> <span style="color: #ff00ff;">CASE</span><span style="color: #000000;"> ic.is_descending_key
- </span><span style="color: #0000ff;">WHEN</span> <span style="color: #800000; font-weight: bold;">1</span>
- <span style="color: #0000ff;">THEN</span> <span style="color: #008000;">@isql_incl</span> <span style="color: #808080;">+</span> <span style="color: #ff00ff;">COALESCE</span>(sc.name, <span style="color: #ff0000;">‘‘</span><span style="color: #000000;">)
- </span><span style="color: #808080;">+</span> <span style="color: #ff0000;">‘</span><span style="color: #ff0000;">, </span><span style="color: #ff0000;">‘</span>
- <span style="color: #0000ff;">ELSE</span> <span style="color: #008000;">@isql_incl</span> <span style="color: #808080;">+</span> <span style="color: #ff00ff;">COALESCE</span>(sc.name, <span style="color: #ff0000;">‘‘</span><span style="color: #000000;">)
- </span><span style="color: #808080;">+</span> <span style="color: #ff0000;">‘</span><span style="color: #ff0000;">, </span><span style="color: #ff0000;">‘</span>
- <span style="color: #0000ff;">END</span>
- <span style="color: #0000ff;">ELSE</span> <span style="color: #008000;">@isql_incl</span>
- <span style="color: #0000ff;">END</span>
- <span style="color: #0000ff;">FROM</span><span style="color: #000000;"> sysindexes i
- </span><span style="color: #0000ff;">INNER</span> <span style="color: #808080;">JOIN</span> sys.index_columns <span style="color: #0000ff;">AS</span> ic <span style="color: #0000ff;">ON</span> ( ic.column_id <span style="color: #808080;">></span> <span style="color: #800000; font-weight: bold;">0</span>
- <span style="color: #808080;">AND</span> ( ic.key_ordinal <span style="color: #808080;">></span> <span style="color: #800000; font-weight: bold;">0</span>
- <span style="color: #808080;">OR</span> ic.partition_ordinal <span style="color: #808080;">=</span> <span style="color: #800000; font-weight: bold;">0</span>
- <span style="color: #808080;">OR</span> ic.is_included_column <span style="color: #808080;">!=</span> <span style="color: #800000; font-weight: bold;">0</span><span style="color: #000000;">
- )
- )
- </span><span style="color: #808080;">AND</span> ( ic.index_id <span style="color: #808080;">=</span> <span style="color: #ff00ff;">CAST</span>(i.indid <span style="color: #0000ff;">AS</span> <span style="color: #0000ff;">INT</span><span style="color: #000000;">)
- </span><span style="color: #808080;">AND</span> ic.<span style="color: #ff00ff;">object_id</span> <span style="color: #808080;">=</span><span style="color: #000000;"> i.id
- )
- </span><span style="color: #0000ff;">INNER</span> <span style="color: #808080;">JOIN</span> sys.columns <span style="color: #0000ff;">AS</span> sc <span style="color: #0000ff;">ON</span> sc.<span style="color: #ff00ff;">object_id</span> <span style="color: #808080;">=</span> ic.<span style="color: #ff00ff;">object_id</span>
- <span style="color: #808080;">AND</span> sc.column_id <span style="color: #808080;">=</span><span style="color: #000000;"> ic.column_id
- </span><span style="color: #0000ff;">WHERE</span> i.indid <span style="color: #808080;">></span> <span style="color: #800000; font-weight: bold;">0</span>
- <span style="color: #808080;">AND</span> i.indid <span style="color: #808080;"><</span> <span style="color: #800000; font-weight: bold;">255</span>
- <span style="color: #808080;">AND</span> ( i.status <span style="color: #808080;">&</span> <span style="color: #800000; font-weight: bold;">64</span> ) <span style="color: #808080;">=</span> <span style="color: #800000; font-weight: bold;">0</span>
- <span style="color: #808080;">AND</span> i.id <span style="color: #808080;">=</span> <span style="color: #008000;">@tableid</span>
- <span style="color: #808080;">AND</span> i.indid <span style="color: #808080;">=</span> <span style="color: #008000;">@indexid</span>
- <span style="color: #0000ff;">ORDER</span> <span style="color: #0000ff;">BY</span><span style="color: #000000;"> i.name ,
- </span><span style="color: #ff00ff;">CASE</span><span style="color: #000000;"> ic.is_included_column
- </span><span style="color: #0000ff;">WHEN</span> <span style="color: #800000; font-weight: bold;">1</span> <span style="color: #0000ff;">THEN</span><span style="color: #000000;"> ic.index_column_id
- </span><span style="color: #0000ff;">ELSE</span><span style="color: #000000;"> ic.key_ordinal
- </span><span style="color: #0000ff;">END</span><span style="color: #000000;">;
- </span><span style="color: #0000ff;">IF</span> <span style="color: #ff00ff;">LEN</span>(<span style="color: #008000;">@isql_key</span>) <span style="color: #808080;">></span> <span style="color: #800000; font-weight: bold;">1</span>
- <span style="color: #0000ff;">SET</span> <span style="color: #008000;">@isql_key</span> <span style="color: #808080;">=</span> <span style="color: #808080;">LEFT</span>(<span style="color: #008000;">@isql_key</span>, <span style="color: #ff00ff;">LEN</span>(<span style="color: #008000;">@isql_key</span>) <span style="color: #808080;">-</span> <span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">);
- </span><span style="color: #0000ff;">IF</span> <span style="color: #ff00ff;">LEN</span>(<span style="color: #008000;">@isql_incl</span>) <span style="color: #808080;">></span> <span style="color: #800000; font-weight: bold;">1</span>
- <span style="color: #0000ff;">SET</span> <span style="color: #008000;">@isql_incl</span> <span style="color: #808080;">=</span> <span style="color: #808080;">LEFT</span>(<span style="color: #008000;">@isql_incl</span>, <span style="color: #ff00ff;">LEN</span>(<span style="color: #008000;">@isql_incl</span>) <span style="color: #808080;">-</span> <span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">);
- </span><span style="color: #0000ff;">UPDATE</span><span style="color: #000000;"> #tmp_indexes
- </span><span style="color: #0000ff;">SET</span> keycolumns <span style="color: #808080;">=</span> <span style="color: #008000;">@isql_key</span><span style="color: #000000;"> ,
- includes </span><span style="color: #808080;">=</span> <span style="color: #008000;">@isql_incl</span>
- <span style="color: #0000ff;">WHERE</span> tableid <span style="color: #808080;">=</span> <span style="color: #008000;">@tableid</span>
- <span style="color: #808080;">AND</span> indexid <span style="color: #808080;">=</span> <span style="color: #008000;">@indexid</span><span style="color: #000000;">;
- </span><span style="color: #0000ff;">FETCH</span> <span style="color: #0000ff;">NEXT</span> <span style="color: #0000ff;">FROM</span> index_cursor <span style="color: #0000ff;">INTO</span> <span style="color: #008000;">@tableid</span>, <span style="color: #008000;">@indexid</span><span style="color: #000000;">;
- </span><span style="color: #0000ff;">END</span><span style="color: #000000;">;
- </span><span style="color: #0000ff;">CLOSE</span><span style="color: #000000;"> index_cursor;
- </span><span style="color: #0000ff;">DEALLOCATE</span><span style="color: #000000;"> index_cursor;
- </span><span style="color: #008080;">--</span><span style="color: #008080;">remove invalid indexes,ie ones without key columns</span><span style="color: #008080;">
- --</span><span style="color: #008080;">删除无效索引(即没有键列的索引)</span>
- <span style="color: #0000ff;">DELETE</span> <span style="color: #0000ff;">FROM</span><span style="color: #000000;"> #tmp_indexes
- </span><span style="color: #0000ff;">WHERE</span> keycolumns <span style="color: #808080;">=</span> <span style="color: #ff0000;">‘‘</span><span style="color: #000000;">;
- </span><span style="color: #008080;">--</span><span style="color: #008080;">################################################################################################</span><span style="color: #008080;">
- --</span><span style="color: #008080;">3. output the index creation scripts</span><span style="color: #008080;">
- --</span><span style="color: #008080;">三。输出索引创建脚本</span>
- <span style="color: #0000ff;">SET</span> NOCOUNT <span style="color: #0000ff;">ON</span><span style="color: #000000;">;
- </span><span style="color: #008080;">--</span><span style="color: #008080;">separator</span>
- <span style="color: #0000ff;">SELECT</span> <span style="color: #ff0000;">‘</span><span style="color: #ff0000;">---------------------------------------------------------------------</span><span style="color: #ff0000;">‘</span><span style="color: #000000;">;
- </span><span style="color: #008080;">--</span><span style="color: #008080;">create index scripts (for backup)</span><span style="color: #008080;">
- --</span><span style="color: #008080;">创建索引脚本(用于备份)</span>
- <span style="color: #0000ff;">SELECT</span> <span style="color: #ff0000;">‘</span><span style="color: #ff0000;">CREATE </span><span style="color: #ff0000;">‘</span> <span style="color: #808080;">+</span> <span style="color: #ff00ff;">CASE</span> <span style="color: #0000ff;">WHEN</span> isunique <span style="color: #808080;">=</span> <span style="color: #800000; font-weight: bold;">1</span> <span style="color: #0000ff;">THEN</span> <span style="color: #ff0000;">‘</span><span style="color: #ff0000;">UNIQUE </span><span style="color: #ff0000;">‘</span>
- <span style="color: #0000ff;">ELSE</span> <span style="color: #ff0000;">‘‘</span>
- <span style="color: #0000ff;">END</span> <span style="color: #808080;">+</span> <span style="color: #ff00ff;">CASE</span> <span style="color: #0000ff;">WHEN</span> isclustered <span style="color: #808080;">=</span> <span style="color: #800000; font-weight: bold;">1</span> <span style="color: #0000ff;">THEN</span> <span style="color: #ff0000;">‘</span><span style="color: #ff0000;">CLUSTERED </span><span style="color: #ff0000;">‘</span>
- <span style="color: #0000ff;">ELSE</span> <span style="color: #ff0000;">‘‘</span>
- <span style="color: #0000ff;">END</span> <span style="color: #808080;">+</span> <span style="color: #ff0000;">‘</span><span style="color: #ff0000;">INDEX [</span><span style="color: #ff0000;">‘</span> <span style="color: #808080;">+</span> indexname <span style="color: #808080;">+</span> <span style="color: #ff0000;">‘</span><span style="color: #ff0000;">]</span><span style="color: #ff0000;">‘</span> <span style="color: #808080;">+</span> <span style="color: #ff0000;">‘</span><span style="color: #ff0000;"> ON [</span><span style="color: #ff0000;">‘</span>
- <span style="color: #808080;">+</span> schemaName <span style="color: #808080 </div>
- <div class=" "="">
- <ul class="m-news-opt fix">
- <li class="opt-item">
- <a href="/sql_question-384368.html" target="_blank"><p>< 上一篇</p><p class="ellipsis">MySQL ------ 相关概念简介(DBMS ,MySQL连接)(十八)</p></a>
- </li>
- <li class="opt-item ta-r">
- <a href="/sql_question-384370.html" target="_blank"><p>下一篇 ></p><p class="ellipsis">docker部署springboot前后端分离项目(jdk+jar包+mysql+redis+nginx)</p></a>
- </li>
- </ul>
- </span>