-- 修正版全库ID字段索引创建脚本 BEGIN TRY BEGIN TRANSACTION; -- 创建临时表存储需要创建索引的表和字段 CREATE TABLE #IndexCreationList ( TableName NVARCHAR(128), ColumnName NVARCHAR(128) ); -- 找出所有需要创建索引的字段 INSERT INTO #IndexCreationList SELECT t.name AS TableName, c.name AS ColumnName FROM sys.tables t JOIN sys.columns c ON t.object_id = c.object_id WHERE c.name LIKE '%ID' AND t.is_ms_shipped = 0 AND NOT EXISTS ( SELECT 1 FROM sys.indexes i JOIN sys.index_columns ic ON i.object_id = ic.object_id AND i.index_id = ic.index_id WHERE i.object_id = t.object_id AND ic.column_id = c.column_id AND i.name = 'IX_' + t.name + '_' + c.name ); -- 动态生成并执行创建索引的SQL DECLARE @sql NVARCHAR(MAX) = ''; SELECT @sql = @sql + 'CREATE INDEX IX_' + TableName + '_' + ColumnName + ' ON ' + QUOTENAME(TableName) + '(' + QUOTENAME(ColumnName) + ');' + CHAR(13) FROM #IndexCreationList; IF LEN(@sql) > 0 BEGIN EXEC sp_executesql @sql; PRINT '成功创建 ' + CAST(@@ROWCOUNT AS NVARCHAR(10)) + ' 个索引'; END ELSE BEGIN PRINT '没有需要创建的索引,所有ID字段索引已存在'; END -- 验证结果 SELECT t.name AS 表名, i.name AS 索引名称, c.name AS 字段名 FROM sys.tables t JOIN sys.indexes i ON t.object_id = i.object_id JOIN sys.index_columns ic ON i.object_id = ic.object_id AND i.index_id = ic.index_id JOIN sys.columns c ON ic.object_id = c.object_id AND ic.column_id = c.column_id WHERE i.name LIKE 'IX_%_%ID' ORDER BY t.name, i.name; DROP TABLE #IndexCreationList; COMMIT TRANSACTION; END TRY BEGIN CATCH IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION; PRINT '错误发生: ' + ERROR_MESSAGE(); PRINT '错误行号: ' + CAST(ERROR_LINE() AS NVARCHAR(10)); END CATCH;