我在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?
创建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数据库中的表等.
| 归档时间: |
|
| 查看次数: |
336 次 |
| 最近记录: |