批量替换存储过程内容脚本sp_SqlReplace

本文介绍了一种在数据库开发中批量替换存储过程内字段名的方法。通过自定义的 SQL 脚本 `sp_SqlReplace`,可以高效地更新所有涉及到字段名变更的存储过程,简化了这一通常繁琐的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

开始

在数据库开发过程中,如果某一个表字段名被重命名。那么在使用到该字段的存储过程,对应的表字段名也要修改。

当存在多个存储都有使用该表字段,需要逐个去修改替换,是一件比较繁琐的事情,我们需要一个能实现批量替换的方法。

 

这里我写了一个批量替换存储过程内容的脚本:

sp_SqlReplace

Use master
Go
if object_ID('[sp_SqlReplace]') is not null
    Drop Procedure sp_SqlReplace
Go
create proc sp_SqlReplace
(
    @OriginalText nvarchar(max),
    @CurrentText nvarchar(max)
)
as  
Set Nocount On

Declare @Count int=0,@i int=1,@sql1 nvarchar(max),@sql2 nvarchar(max),@objectname sysname;
Declare @tblTmp Table(ID int identity primary key,objectID int,objectName sysname)

Insert Into @tblTmp(objectID,objectName) Select distinct  id,object_name(id) From sys.syscomments Where text like '%'+@OriginalText+'%'
Set @Count=@@ROWCOUNT

If @Count=0 Return 

Begin Try
    Begin Transaction
    While @i<=@Count
    Begin
        Select @sql1='if object_id('''+quotename(objectName)+''') Is Not null Drop '+case  when object_id(objectName,N'P') is not null then 'Procedure ' when Coalesce(object_id(objectName,N'FN'),object_id(objectName,N'IF'),object_id(objectName,N'TF')) is not null then 'Function ' when object_id(objectName,N'TR') is not null then 'Trigger ' else 'View 'end+Quotename(objectName) ,
                @sql2=Replace(object_definition(objectID),@OriginalText,@CurrentText),
                @objectname=objectName
            From @tblTmp 
            Where ID=@i
            
        Exec (@sql1)    
        Print @objectname
        
        Exec (@sql2)
        
        Set @i+=1
    End    
    Commit Transaction
    Select N'影响到对象有:' As [信息提示]
    Select 'Exec sp_sql '+objectName As [对象名称],case  when object_id(objectName,N'P') is not null then 'Procedure ' when Coalesce(object_id(objectName,N'FN'),object_id(objectName,N'IF'),object_id(objectName,N'TF')) is not null then 'Function ' when object_id(objectName,N'TR') is not null then 'Trigger ' else 'View 'end As [类型] From @tblTmp
End Try
Begin Catch    
    Rollback transaction
    throw
End Catch
Go

 

 

 调用方法

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值