2

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

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

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

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

问题在于试图将更改从测试推到登台和现场。它需要大量的手动编辑或查找/替换——这会在关键系统上引入潜在的错误。

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

4

1 回答 1

6

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

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

并在分期:

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

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

于 2013-08-29T13:40:33.923 回答