从不同数据库加入2个表的最佳方法是什么?在我的情况下,我有一个开发数据库,它具有postfix,例如_DEV,而在生产中有_PROD。
问题是,如果我加入这两个表,我必须引用一个完整的数据库名称,例如DB1_DEV.dbo.table1 INNER JOIN DB2_DEV.dbo.table100
虽然工作得很好但是如果你想将它投入生产,那将是一个噩梦,因为我必须改变这些。
谢谢
答案 0 :(得分:10)
您可以使用 Synonyms 来简化查询。例如:
-- 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
编辑:您可以为相关表格定义同义词。在查询表的任何位置使用同义词而不是全名。
部署到生产环境时,您所要做的就是更改同义词。
答案 1 :(得分:2)
根据您的具体情况,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”的查询。
以下是解释同义词和观点之间差异的讨论:
答案 2 :(得分:1)
以下是一个建议:将您的Dev和Prod数据库移动到具有相同名称的不同服务器群集。
如果您不能或不会这样做,我建议您找到一些方法来在查询中参数化您的数据库名称。
答案 3 :(得分:0)
您必须将您的架构名称存储在数据库中的某个位置。获取该模式名称并构建动态sql。并使用oracle内部包DBMS_SQL.EXECUTE()来执行您的选择查询。
然后当你转移到PROD时,你不必改变任何东西。