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


    开始

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

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

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

    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

     调用方法

  • 相关阅读:
    微信开发第一步—接入指南
    摸不着
    dubbo监控中心安装部署
    解决mapper映射文件不发布问题
    单例设计模式
    Spring与Hibernate集成、Spring与Struts2集成
    Spring MVC对日期处理的不友好问题
    常用的系统存储过程
    这就是成长(刚开始经常犯的错误随记)
    一些简单的查询
  • 原文地址:https://www.cnblogs.com/wghao/p/6693091.html
Copyright © 2020-2023  润新知