我有大约100到150个存储过程。我需要使用同义词快速更改对所有外部数据库的引用。我有例如我的程序中的这些代码行:
select column1, column2
from OtherDb.SomeSchema.SomeTable
或
exec SOMEOTHERSERVER.OTHERDB.dbo.DOSOMETHING
并需要用
替换它 select column1, column2
from dbo.FirstSynonym
和
exec dbo.DoSomethingSynonym
手动打开所有这些程序会花费我相当多的时间。知道如何快速实现这个目标吗?
谢谢, 彼得
答案 0 :(得分:0)
您可以执行以下操作:
答案 1 :(得分:0)
将bcp或sqlcmd与此查询一起使用以生成一系列ALTER
SELECT
REPLACE(
REPLACE(definition,
'SOMEOTHERSERVER.OTHERDB.dbo.DOSOMETHING',
'dbo.DoSomethingSynonym'
)
'OtherDb.SomeSchema.SomeTable',
'dbo.FirstSynonym'
) + '
GO
'
FROM
sys.sql_modules
如果需要,您可以添加其他替换以将CREATE PROC
更改为ALTER PROC
答案 2 :(得分:0)
我更喜欢gbn的解决方案,但我会描述我是如何解决这个问题的:
也可以直接从C#为每个编辑对象执行alter脚本,但我更喜欢在执行之前看到脚本。
由于显而易见的原因,当进行替换时,同义词必须按其base_object_name长度按降序排序。