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?
您好像通過將最終Sql Query與基於SP輸入參數的條件連接起來使用Dynamic Sql – sll