2011-10-05 64 views
0

我試圖改變我們的數據庫中的存儲過程從一個硬編碼的選擇從1特定的數據庫,以便能夠根據我們的任何數據庫選擇一個ID傳入了sproc。這是一個什麼樣的存儲過程是做我們存根:動態地從不同的數據庫中選擇基於輸入到sproc

ALTER PROCEDURE [dbo].[GetByAdId] 
(
@AdId int, 
@UserCompanyId int 
) 
AS 
SET NOCOUNT ON 

SELECT 
    [User].[UserId], 
    UserMappings.IsActive, 
    IsAccountOwner = (SELECT Count(*) FROM DB1_SetUp.dbo.ad Adv WHERE Adv.AdID = UserMappings.AdID AND Adv.PrimaryAccountOwnerID = [User].[UserId]) 
FROM 
    [User] INNER JOIN UserMappings ON 
    (
     UserMappings.UserID = [User].UserID 
     AND UserMappings.AdID = @AdId 
     AND UserMappings.UserCompanyId = @UserCompanyId 
    ) 

基本上「IsAccountOwner」變量是硬編碼到從DB1_SetUp每一次選擇,但我們有許多的SetUp分貝的針對不同人羣的,所以像DB2_SetUp, DB3_SetUp等等。UserCompanyId變量被傳遞到存儲區功能中,像組ID一樣,可以用來指向我希望從中選擇的特定的SetUp DB,但是我不知道如何做到這一點。我基本上想上的東西之流:

SELECT * FROM (
    CASE @UserCompanyId 
     WHEN 3 THEN 'DB3_SetUp' 
     WHEN 4 THEN 'DB4_SetUp' 
) 

有沒有乾淨的方式來做到這一點,否則我將不得不設置在每個組DB這個存儲過程,並調用特定的一個在每個DB?

+0

您好像通過將最終Sql Query與基於SP輸入參數的條件連​​接起來使用Dynamic Sql – sll

回答