2012-01-09 57 views
1

我們正在開發一個應用程序,我們有時需要一次支持該軟件的多個版本。例如版本1-0-300,1-0-300-With-Test-FunctionalityA,版本1-0-300-With-Test-FunctionalityB。由於這種需求,我們有時使用相同的存儲過程不同的名稱在不同的版本,例如存儲過程重定向邏輯

1-0-300」使用存儲過程「USP_GetProucts

-1-0- 300隨着試驗FunctionalityA「使用存儲過程」 USP_GetProucts_FunctionalityA

1-0-300,隨着試驗FunctionalityB「使用存儲過程」 USP_GetProucts_FunctionalityB

一些事實

1-爲什麼我們不使用一些替代的解決方案一樣,我們可以有一個參數‘WhichStoredProcedureToCall’根據這個參數,我們可以調用所需的存儲過程? 因爲「USP_GetProucts」可以具有與「USP_GetProucts_FunctionalityA」&完全不同的功能,所以這些是巨大的存儲過程。

2-我們正在使用SQL2008。

所以我的問題是,我們可以實現某種類型的「存儲過程重定向」,如果「USP_GetProucts_FunctionalityA」找不到那麼得到的結果表「USP_GetProucts」

問候。

+0

我不明白您的方案。爲什麼應用程序會調用'USP_GetProucts_FunctionalityA',如果直到後來的版本才存在?如果您正在部署對數據庫的更改以實現此目的,那麼重定向的原因不僅僅是同時更新架構?無論如何你可能想看同義詞。 – 2012-01-09 10:57:47

+0

我們同時支持3個版本,他們可以在當天發佈 – 2012-01-09 11:27:18

回答

1

你可以看到,如果一個stored procedure存在acessing到sysobjects table

IF EXISTS(select name from sysobjects where type = 'P' and name = 'tablename') 
    BEGIN 
    select 1 
    END 

然後你只需要進行必要的IF的。


由於您使用SQL Server,你可以看看到SINONYMS

你可以做USP_GetProuctsUSP_GetProucts_FunctionalityAUSP_GetProucts_FunctionalityB sinomyns :)

+0

&爲了如果我需要另一個存儲過程? – 2012-01-09 12:22:26

+0

@YaqubAhmad我編輯了我的答案:) – 2012-01-09 12:58:21

+0

你的意思是我可以有一個StoredProcedureHandleMissingProcedure&該程序應該處理其他程序的調用? – 2012-01-09 13:18:51

1

如果使用USP_GetProducts爲基礎的程序,你可以只檢查中,如果存儲過程可以:

select name from sys.objects where type = 'P' 

然後你可以檢查一下,如果你的程序可用,並調用它,或致電的東西,如果不同不。