2013-09-25 16 views
4

考慮以下查詢,其中僅數據庫名稱不同(相同的服務器上)我們可以將SQL查詢中的數據庫名稱作爲參數傳遞嗎?

Select * from sampledev.dbo.Sample 
Select * from sampleqa.dbo.Sample 

上述查詢是一個過程的一部分。每次我必須運行該過程時,我必須確保它引用了正確的數據庫(如果不是,則進行重命名)。

我想將數據庫名稱作爲參數傳遞給存儲過程。問題是,這可能嗎?如果是,如何?

+0

爲什麼不乾脆把兩個DBS相同的SPR,幷包括告訴選擇要使用的代碼中的參數? –

+0

,因爲dbs可以改變,我在很多地方都有這種重複。 – Tilak

回答

0

這麼簡單:?

CREATE PROC GetData 
(
    @DatabaseName VARCHAR(255) 
) 
AS 
BEGIN 

IF @DatabaseName = 'sampledev' 
    SELECT * FROM sampledev.dbo.Sample 
ELSE IF @DatabaseName = 'sampleqa' 
    SELECT * FROM sampleqa.dbo.Sample 

END 

用途:

EXEC的GetData 'sampledev'

結果


開發數據

(1行(一個或多個)受影響)

EXEC的GetData 'sampleqa'

結果


QA數據

(1行( s)受影響)

+1

如果其他梯子難以維護。我有很多數據庫,這個重複也在很多地方。 – Tilak

3

你可以做到這一點使用sp_executesql

DECLARE @Database NVARCHAR(255), 
     @Query  NVARCHAR(MAX) 

SET @Database = 'Database' 
SET @Query = N'SELECT * FROM ' + @Database + '.dbo.Table' 

EXEC sp_executesql @Query 
+3

這很容易被SQL注入。使用參數會更好。請參閱http://technet.microsoft.com/en-us/library/ms188001.aspx – Vulcronos

+0

是否有可能沒有動態查詢? –

相關問題