sql如何批量替换代码中字符串?

解决方案 »

  1.   

    sql中所有对象(存储过程/函数/触发器等)含有一个指定的字符串,
    如何批量将代码中的该字符串替换特定的字符串?
    比如一个字符串在多个存储过程/函数/触发器都存在,如何它全部用另一指定符串替换.
    是不是直接将syscomments中的text栏位的内容进行替换就可以了?
      

  2.   

    syscomments这个系统目录根本不允许更新。
      

  3.   

     导出脚本生成.SQL文件,替换后重新生成
      

  4.   

    目前来看imaor的提议最具有可操作性,期待有更好的解决方法...
      

  5.   


    declare 
    @objectName as sysname,
    @definition as nvarchar(max),
    @sourceStr as nvarchar(100),
    @replaceStr as nvarchar(100)
    set @sourceStr='testString1';--要被替换的字符串,换成你自己的。
    set @replaceStr='testString2';--替换字符串,换成你自己的。

    select OBJECT_NAME(object_id) as objName,definition
    into #tempObj
    from sys.sql_modules;declare cReplacedObj cursor fast_forward for
    select objName,definition
    from #tempObj;

    open cReplacedObj
    fetch next from cReplacedObj into @objectName,@definition;
    while @@FETCH_STATUS=0
    begin
    set @definition=replace(@definition,@sourceStr,@replaceStr);--替换操作。
    set @definition=N'alter'+substring(@definition,CHARINDEX(' ',@definition),len(@definition));--动态生成alter语句,重新定义相关的函数,存贮过程或触发器。
    exec(@definition);--执行alter语句。
    fetch next from cReplacedObj into @objectName,@definition;
    end
    close cReplacedObj;
    deallocate cReplacedObj;
      

  6.   

    突然发现上面代码中定议的@objectName是没用的,写的时候为什么会定义上呢,好像现在建表一开始就是什么id,name什么的,写习惯了汗,还有就是上面的语句是有缺陷的,就是你替换的字符串必须是你的存贮过程等特定的,不能破坏sql代码本身的语法正确性。比如,你非要把create给替换成abcd,或是要替换单个字符,那我就没辙了。