给大家分享好东本喽!将当前数据库里所有存储过程进行批量替换方案
2013-04-10 10:39
423 查看
----因业务需要,可能会将存储过程中的某一部分内容进行替换。 比方说,“记账”与“记帐”,要进行全部统一,以下脚本提供了解决方案
USE [MyTargetDB] go --DROP TABLE all_proc_before_replace,to_replace_create_proc_error IF OBJECT_ID('master..all_proc_before_replace', 'U') IS NOT NULL DROP TABLE master..all_proc_before_replace SELECT o.name AS proc_name, definition , o.type , ' ' AS remark INTO master..all_proc_before_replace --- 做备份,备份到master..all_proc_before_replace FROM sys.sql_modules s , sys.objects o WHERE o.object_id = s.object_id AND o.type = 'P' -- 只指定过程 AND o.name not LIKE 'pr[_]crm[_]%' --剔除掉CRM相关过程 AND s.definition IS NOT NULL --未加密的过程 go SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO --创建表to_replace_create_proc_error 收集执行替换后的过程报错信息 IF OBJECT_ID('master..to_replace_create_proc_error', 'U') IS NOT NULL DROP TABLE master..to_replace_create_proc_error CREATE TABLE master..to_replace_create_proc_error ( proc_name NVARCHAR(128) , definition NVARCHAR(MAX) , errormsg NVARCHAR(MAX) ) DECLARE @proc_name NVARCHAR(128) , @definition NVARCHAR(MAX) DECLARE c CURSOR FAST_FORWARD FOR SELECT proc_name , definition FROM master..all_proc_before_replace where proc_name not LIKE 'pr[_]crm[_]%' --剔除掉CRM相关过程 OPEN c FETCH NEXT FROM C INTO @proc_name, @definition WHILE @@FETCH_STATUS = 0 BEGIN IF @definition LIKE '%tempdb%' --符合条件的过程,进行替换 BEGIN SET @definition = REPLACE(@definition, '记账', '记帐') -- 此处可以进行多次 set @definition = REPLACE(@definition, '一', '壹') --SET @definition = REPLACE(@definition, '中心', 'tempdb..#') --SET @definition = REPLACE(@definition, 'tempdb..#WFPUSER#', 'master..#WFPUSER#') BEGIN TRY BEGIN TRANSACTION drop_create_proc EXEC ( ' DROP PROC [' + @proc_name +']' ) -- 先DROP EXEC ( @definition )-- 再CREATE UPDATE master..all_proc_before_replace -- 将已经替换后执行成功的,进行标记 SET remark = 'Y' WHERE proc_name = @proc_name COMMIT TRANSACTION drop_create_proc END TRY BEGIN CATCH ROLLBACK TRANSACTION drop_create_proc INSERT INTO master..to_replace_create_proc_error --将已经替换后执行不成功的,收集报错信息内容 SELECT @proc_name , @definition , ERROR_MESSAGE() END CATCH END FETCH NEXT FROM C INTO @proc_name, @definition END CLOSE c DEALLOCATE c IF EXISTS ( SELECT * FROM master..to_replace_create_proc_error ) BEGIN ---- 人为返回报错,便于查找 RAISERROR 999999 ' 本服务器WFP数据库中,有过程对象未替换完成,请手工处理 ' END
相关文章推荐
- 将当前数据库里所有存储过程的内容进行批量替换方案
- 删除当前数据库下面的所有用户表存储过程
- SQL SERVER 中对当前库中的所有视图进行刷新的存储过程
- SQL Server查询数据库所有存储过程、触发器、索引信息SQL分享
- SQL Server查询数据库所有存储过程、触发器、索引信息SQL分享
- 一个查询数据库所有表的存储过程(允许按表名模糊查询一级按显示数量进行分页)
- 给大家分享好东西喽!DDL触发器,追踪存储过程定义语句变更日志,及当前版本与上一版本。
- 加密当前数据库的所有存储过程。
- SQL Server查询数据库所有存储过程、触发器、索引信息SQL分享
- 写了一个针对一个的所有表进行的存储过程!可以方便的清空数据库!
- 删除当前数据库下面的所有用户表存储过程
- SQL Server 删除数据库所有表和所有存储过程
- 删除数据库的所有存储过程、主键、外键、索引等
- 用游标遍历某台服务器下所有的数据库中 汲及到某个关键词的 所有存储过程及自定义函数
- 清空数据库中的所有的表的存储过程
- 检查当前库下内容含有指定字符的所有存储过程
- 您可能需要将当前数据库的兼容级别设置为更高的值,以启用此功能。有关存储过程 sp_dbcmptlevel 的信息,请参见帮助。
- 删除数据库中所有存储过程和函数的sql语句
- 删除数据库所有存储过程的SQL语句
- oracle删除当前用户所有表,视图,存储过程等