[英]What is best approach of joining 2 tables from different Database?
从不同数据库连接2个表的最佳方法是什么? 在我的情况下,我有一个开发数据库,具有postfix,如_DEV,而生产中有_PROD。
问题是,如果我加入这两个表,我必须引用一个完整的数据库名称,如DB1_DEV.dbo.table1 INNER JOIN DB2_DEV.dbo.table100
虽然工作得很好但是如果你想把它转移到生产中,那将是一个噩梦,因为我必须改变这些。
谢谢
您可以使用同义词来简化查询。 例如:
-- Create a synonym for the Product table in AdventureWorks.
USE tempdb;
GO
CREATE SYNONYM MyProduct
FOR AdventureWorks.Production.Product;
GO
-- Query the Product table by using the synonym.
USE tempdb;
GO
SELECT ProductID, Name FROM MyProduct WHERE ProductID < 5;
GO
编辑:您可以为相关表定义同义词。 在查询表的任何位置使用同义词而不是全名。
部署到生产环境时,您只需更改同义词即可。
根据您的具体情况,SYNONYM可能是最佳答案,也可能是VIEW。
带有VIEW的示例:
CREATE VIEW table1 AS SELECT * FROM DB1_DEV.dbo.table1
之后,当你搬到PROD时:
ALTER VIEW table1 AS SELECT * FROM DB1_PROD.dbo.table1
就像使用SYNONYM一样,更新神奇地修复了所有简单引用“table1”的查询。
以下是解释同义词和观点之间差异的讨论:
这是一个建议:将您的Dev和Prod数据库移动到具有相同名称的不同服务器群集。
如果您不能或不会这样做,我建议您找到一些方法来在查询中参数化您的数据库名称。
您必须将您的架构名称存储在数据库中的某个位置。 获取该模式名称并构建动态sql。 并使用oracle内部包DBMS_SQL.EXECUTE()来执行您的选择查询。
然后,当你转移到PROD时,你不必改变任何东西。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.