2012-09-05 97 views
0

我有一個將源數據庫中的記錄存檔到目標數據庫的過程,其中源數據庫中的表被鏡像到目標數據庫中。因此,當我指定表名,我也必須在充分指定數據庫名稱,如下所示:在Sybase的存儲過程中將大量位置的變量用於存儲過程中的表名

DB_NAME.dbo.TABLE_NAME 

但是,我也必須移動環境中,相應的數據庫名稱不同之間的存儲過程。

例如:

開發:

DEV_DB_NAME.dbo.TABLE_NAME 

QA:

QA_DB_NAME.dbo.TABLE_NAME 

我可以從使用shell腳本的環境變量獲得這些數據庫名稱,並將其傳遞到存儲過程。但是,TSQL不允許數據庫名稱的變量。

我有一個解決方案,我基本上只是將整個腳本轉換爲一個字符串,並使用動態SQL與exec一起運行。

我的解決方案建議嗎?還有其他解決方案嗎?

謝謝。

+0

爲什麼你不能只使用dbo.TABLE_NAME而不是DB_Name.dbo.TABLE_NAME?您是否在存儲過程中引用了多個數據庫? – ClearLogic

+0

@ClearLogic,是的,我在同一個SPROC中引用了2個數據庫。 – czchlong

回答

0

你可以使用SQSH,這是一個isql的替代方案,允許您定義的變量,而不是像貝殼瓦爾,使您能夠安裝相同的DDL到不同的數據庫,正確地替換數據庫名稱等。

或者在Shell變量或臨時文件中使用shell變量和異步Sql提供isql。

或者你是否必須在這種情況下使用SP?這聽起來不像是利用了SP的主要優勢之一:優化一次並運行多次,節省了時間限制。在這種情況下,使用shell腳本或perl腳本執行任務,並提供命令行參數/ config file/environment vars來說明哪些數據庫。

0

如何創建同義詞?並在存儲過程中使用同義詞。然後,每個Envorinment可以對這些同義詞進行不同的定義。

我希望同義詞在Sybase可以跨數據庫SQL Server等來定義2008