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

sim*_*831 1 t-sql sql-server

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

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

select * from MySeparateDatabase_LIVE.dbo.MyTable
select * from MySeparateDatabase_STAGING.dbo.MyTable
select * from MySeparateDatabase_TEST.dbo.MyTable
Run Code Online (Sandbox Code Playgroud)

不幸的是,所有实时,登台和测试数据库都在同一个SQL实例上,公司约束意味着这不会很快改变.

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

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

Aar*_*and 5

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

CREATE SYNONYM dbo.MyTable FOR MySeparateDatabase_Test.dbo.MyTable;
Run Code Online (Sandbox Code Playgroud)

在分期中:

CREATE SYNONYM dbo.MyTable FOR MySeparateDatabase_Staging.dbo.MyTable;
Run Code Online (Sandbox Code Playgroud)

这提供了一个抽象层,并允许您在每个数据库中使用相同的代码.这样,您可以部署不同的同义词一次,但过程可以相同(并且它们仅在dbo.MyTable没有数据库前缀的情况下引用,让同义词重定向到正确的数据库).测试db中的存储过程将引用其他测试数据库中的表,staging db中的存储过程将引用其他staging数据库中的表等.