From 73c76462e0bb06e79218b52e0dbf15058466612d Mon Sep 17 00:00:00 2001 From: yuyubohh <403221757@qq.com> Date: Sat, 13 Sep 2025 11:23:13 +0800 Subject: [PATCH] 1 --- 全数据库创建脚本.txt | 67 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 全数据库创建脚本.txt diff --git a/全数据库创建脚本.txt b/全数据库创建脚本.txt new file mode 100644 index 0000000..de0ddfa --- /dev/null +++ b/全数据库创建脚本.txt @@ -0,0 +1,67 @@ + +-- 修正版全库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;