从存储过程引用远程MS SQL数据库



我在MS SQL2008 R2上继承了一个大型遗留系统。

有大量的存储过程引用另一个数据库:

select * from MySeparateDatabase_LIVE.dbo.MyTable
select * from MySeparateDatabase_STAGING.dbo.MyTable
select * from MySeparateDatabase_TEST.dbo.MyTable

不幸的是,所有的实时数据库、暂存数据库和测试数据库都在同一个SQL实例上,公司的限制意味着这种情况不会很快改变。

这个问题来自于试图将更改从测试推送到暂存和实时。它需要大量的手动编辑或查找/替换,这会在关键系统上引入潜在的错误。

我可以使用哪些技术在每个数据库上使用完全相同的SP?

创建SYNONYM s,例如在测试数据库中:

CREATE SYNONYM dbo.MyTable FOR MySeparateDatabase_Test.dbo.MyTable;

以及分期付款:

CREATE SYNONYM dbo.MyTable FOR MySeparateDatabase_Staging.dbo.MyTable;

这提供了一层抽象,并允许您在每个数据库中拥有相同的代码。通过这种方式,您可以一次性部署不同的同义词,但过程可以完全相同(并且它们只引用dbo.MyTable而不引用数据库前缀,从而使同义词重定向到正确的数据库)。测试数据库中的一个存储过程将引用另一个测试数据库的表,暂存数据库中的存储过程将参考另一个暂存数据库的表等。

最新更新