# [SQL Server] 重建 INDEX 的語法 怕以後要用做個紀錄 環境是 sql server, 無法使用STRING_AGG的版本 ```=sql WITH all_indexs AS ( SELECT s.name AS SchemaName, t.name AS TableName, i.name AS IndexName, ROW_NUMBER() OVER (PARTITION BY t.object_id ORDER BY i.name) AS IndexOrder, i.type_desc AS IndexType, i.is_unique, i.is_primary_key, STUFF( (SELECT ',' + c2.name + ' ' + CASE ic2.is_descending_key WHEN 0 THEN 'ASC' ELSE 'DESC' END FROM sys.index_columns ic2 JOIN sys.columns c2 ON ic2.object_id = c2.object_id AND ic2.column_id = c2.column_id WHERE ic2.object_id = i.object_id AND ic2.index_id = i.index_id ORDER BY ic2.key_ordinal FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '' ) AS IndexColumns FROM sys.schemas s JOIN sys.tables t ON s.schema_id = t.schema_id JOIN sys.indexes i ON t.object_id = i.object_id WHERE i.name IS NOT NULL AND is_primary_key=0 ) select ('DROP INDEX ' + IndexName +' ON ' + TableName + ';') as drop_text, ('CREATE INDEX ' + TableName + '_' + CAST(IndexOrder AS varchar) + ' ON ' + TableName + '(' +IndexColumns+ ');' ) as create_text from all_indexs ```