2014-01-07 50 views
1

在SQL Server中是否有任何內置方式來覆蓋單個事務的現有存儲過程?可能會影響/覆蓋SQL Server存儲過程

說我有一個存儲過程

prc_GetValidUsers 
@param1 int 
... 
INSERT INTO * 
........prc_GetIdFromString param3 
... 
... 

是否有可能爲一個單一的交易,重新定義什麼prc_GetIdFromString別的東西?還是不可能做到這一點?

+0

爲什麼你不使用sp中的參數?根據參數創建另一個表的路徑? – Lamak

+0

我想單元測試prc_GetValidUsers,但prc_GetIdFromString是一個引用很多表的巨大函數,並且是遺留代碼的一部分。由於它只是爲了測試目的,所以我不想爲測試添加任何代碼,但我也不想在所有這些表中創建用於測試小函數的數據。 –

+0

在測試中,創建dbo.prc_TestGetIdFromString,刪除所有額外的代碼。改爲調用此SP。沒有面向對象的概念,比如在數據庫中過度使用。如果你想要看起來,創建一個模式[測試]。然後你可以調用test.prc_GetIdFromString而不是dbo.prc_TestGetIdFromString ... –

回答

0

如果您使用的是SQL Server 2005或更高版本,則可以使用SYNONYM在運行時指向正確的代碼。這需要將現有代碼以新名稱移動到SP,因此SYNONYM可能具有原始SP的名稱(以便引用原始SP的所有內容都不需要更改)。您還可以創建另一個SP來執行所需的簡化功能。 SYNONYM然後可以指向你想要運行的SP。