日期:2014-05-17  浏览次数:20544 次

sql如何批量替换代码中字符串?
sql如何批量替换代码中字符串?
------最佳解决方案--------------------

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;

------其他解决方案--------------------
 导出脚本生成.SQL文件,替换后重新生成
------其他解决方案--------------------
syscomments这个系统目录根本不允许更新。
------其他解决方案--------------------
不能更改目录视图的东西,只能用遍历来拼接语句再修改》。。。。工作量很大,或者使用第三方工具。
------其他解决方案--------------------
都是一样的话ctrl+F
------其他解决方案--------------------
sql中所有对象(存储过程/函数/触发器等)含有一个指定的字符串,
如何批量将代码中的该字符串替换特定的字符串?
比如一个字符串在多个存储过程/函数/触发器都存在,如何它全部用另一指定符串替换.
是不是直接将syscomments中的text栏位的内容进行替换就可以了?
------其他解决方案--------------------
因发贴遇到帖子有含有非法词组的错误提示,所以将标题和内容分两次发了....
------其他解决方案--------------------
目前来看imaor的提议最具有可操作性,期待有更好的解决方法...
------其他解决方案--------------------
突然发现上面代码中定议的@objectName是没用的,写的时候为什么会定义上呢,好像现在建表一开始就是什么id,name什么的,写习惯了。。。汗,

还有就是上面的语句是有缺陷的,就是你替换的字符串必须是你的存贮过程等特定的,不能破坏sql代码本身的语法正确性。比如,你非要把create给替换成abcd,或是要替换单个字符,那我就没辙了。