我正在尝试从1个特定数据库的硬编码选择中更改数据库中的存储过程,以便能够根据传入sproc的id从任何数据库中进行选择。这是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 db,如DB2_SetUp,DB3_SetUp等。将UserCompanyId变量传递给sproc函数,就像一个组Id可用于指向我希望它选择的特定SetUp DB,但我不知道如何做到这一点。我基本上想要的东西是:
SELECT * FROM (
CASE @UserCompanyId
WHEN 3 THEN 'DB3_SetUp'
WHEN 4 THEN 'DB4_SetUp'
)
有没有干净的方法来执行此操作,或者我是否必须在每个组DB上设置此sproc并在每个DB上调用特定的sproc?
答案 0 :(得分:0)
我过去通过动态构建我想要执行的SQL(基于传入的参数)然后使用sp_executesql
执行SQL来完成此操作