考慮以下查詢,其中僅數據庫名稱不同(相同的服務器上)我們可以將SQL查詢中的數據庫名稱作爲參數傳遞嗎?
Select * from sampledev.dbo.Sample
Select * from sampleqa.dbo.Sample
上述查詢是一個過程的一部分。每次我必須運行該過程時,我必須確保它引用了正確的數據庫(如果不是,則進行重命名)。
我想將數據庫名稱作爲參數傳遞給存儲過程。問題是,這可能嗎?如果是,如何?
考慮以下查詢,其中僅數據庫名稱不同(相同的服務器上)我們可以將SQL查詢中的數據庫名稱作爲參數傳遞嗎?
Select * from sampledev.dbo.Sample
Select * from sampleqa.dbo.Sample
上述查詢是一個過程的一部分。每次我必須運行該過程時,我必須確保它引用了正確的數據庫(如果不是,則進行重命名)。
我想將數據庫名稱作爲參數傳遞給存儲過程。問題是,這可能嗎?如果是,如何?
這麼簡單:?
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)受影響)
如果其他梯子難以維護。我有很多數據庫,這個重複也在很多地方。 – Tilak
你可以做到這一點使用sp_executesql
DECLARE @Database NVARCHAR(255),
@Query NVARCHAR(MAX)
SET @Database = 'Database'
SET @Query = N'SELECT * FROM ' + @Database + '.dbo.Table'
EXEC sp_executesql @Query
這很容易被SQL注入。使用參數會更好。請參閱http://technet.microsoft.com/en-us/library/ms188001.aspx – Vulcronos
是否有可能沒有動態查詢? –
爲什麼不乾脆把兩個DBS相同的SPR,幷包括告訴選擇要使用的代碼中的參數? –
,因爲dbs可以改變,我在很多地方都有這種重複。 – Tilak