2013-07-02 38 views
0

我有以下情況:存儲過程中的不同數據庫

存儲過程中的輸入參數是數據庫名稱。所以,取決於這個參數,查詢是在不同的數據庫上執行的。每個查詢都是一樣的,下面只是一個簡單的例子。

如何編寫存儲過程(使用動態sql除外)以避免IF ... ELSE語句,如代碼如下。

ALTER PROCEDURE [dbo].[usp_Item_GetAll] 
(
    @DBName nvarchar(255) = '' 
) 
AS 
BEGIN 

IF @DBName = 'ItemUsers' 
BEGIN 
    SELECT 
    * 
    FROM ItemUsers.dbo.vW_DAM_ItemWithAttribute 
END 

ELSE IF @DBName = 'CollectionUsers' 
BEGIN 
    SELECT 
     * 
    FROM CollectionUsers.dbo.vW_DAM_ItemWithAttribute 
END 
+1

我不認爲查詢字符串有除動態SQL另一種方式和你在這裏做了什麼。 – liebs19

回答

0

您可以創建一個包含動態查詢與數據庫名稱一起,然後執行使用EXEC命令是這樣的

ALTER PROCEDURE [dbo].[usp_Item_GetAll] 
(
    @DBName nvarchar(255) = '' 
) 
AS 
BEGIN 

DECLARE @SQL varchar(MAX) 
SET @SQL='SELECT * FROM ['[email protected]+'].dbo.[vW_DAM_ItemWithAttribute]' 
EXEC(@SQL) 
END 
+2

我會使用'QUOTENAME()'而不是手動在它周圍放上方括號。 –