Динамический выбор из разных БД на основе ввода в sproc - PullRequest
0 голосов
/ 05 октября 2011

Я пытаюсь изменить хранимую процедуру в нашей БД из жестко запрограммированного выбора из 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 на каждой групповой БД и вызвать конкретный на каждой БД?

1 Ответ

0 голосов
/ 05 октября 2011

Я делал это в прошлом, динамически создавая SQL, который я хотел выполнить (основываясь на переданных параметрах), а затем выполняя SQL с помощью sp_executesql

см .: http://msdn.microsoft.com/en-us/library/ms188001.aspx

...