Я пытаюсь изменить хранимую процедуру в нашей БД из жестко запрограммированного выбора из 1 конкретной БД, чтобы иметь возможность выбрать любую из наших БД на основе идентификатора, который передается в 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 каждый раз, но у нас есть несколько наборов db для разных групп, например, DB2_SetUp, DB3_SetUp и т. Д. Переменная UserCompanyId, передаваемая в sproc, действует как группа Id и может использоваться для указания на конкретную базу данных SetUp, из которой я хочу ее выбрать, но я не уверен, как это сделать. Я в основном хотел что-то вроде:
SELECT * FROM (
CASE @UserCompanyId
WHEN 3 THEN 'DB3_SetUp'
WHEN 4 THEN 'DB4_SetUp'
)
Есть ли чистый способ сделать это, или мне нужно будет настроить этот sproc на каждой групповой БД и вызвать конкретный на каждой БД?