2010-02-10 46 views
1

如何避免在存儲過程中引用表時硬編碼數據庫名稱。例如,有兩個數據庫db1和db2。我正在寫一個db2中的存儲過程,它引用兩個表,一個來自db1,另一個來自db2。兩者都在同一個sybase服務器上。引用表時的數據庫名稱 - Sybase

回答

4

如果我正確理解你的問題,一方面是,在你的存儲過程,你可以直接按名稱引用表在同一個數據庫

SELECT ... 
FROM table_in_db2 

您可以通過引用表數據庫db1前綴數據庫名和一個空的所有者:

SELECT ... 
FROM db1..table_in_db1 

在另一方面,如果你想避免在程序硬編碼的數據庫名稱可能會在數據庫0123創建一個視圖引用db1表:

CREATE VIEW view_in_db2 
AS 
    SELECT * 
    FROM db1..table_in_db1 

和使用,在該過程:

SELECT ... 
FROM view_in_db2 
0

你需要保持代碼的可移植性,包括2個數據庫,但要避免由名引用數據庫。然後,您可以創建代理表(或代理視圖,如果這些視圖存在於12.5中)。有關本地對象,請參閱代理表。

這會行得通,但每次移動/更改數據庫時都需要額外注意。但無論如何,你可以實現的關注點分離。