【发布时间】:2011-12-01 15:04:03
【问题描述】:
我正在尝试从来自 1 个特定数据库的硬编码选择更改我们数据库中的存储过程,以便能够根据传递到存储过程中的 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 变量像组一样被传递到存储过程函数中Id 和 可用于指向我希望它从中选择的特定 SetUp DB,但我不确定如何执行此操作。我基本上想要一些类似的东西:
SELECT * FROM (
CASE @UserCompanyId
WHEN 3 THEN 'DB3_SetUp'
WHEN 4 THEN 'DB4_SetUp'
)
有没有一种干净的方法可以做到这一点,或者我必须在每个组 DB 上设置这个存储过程并在每个 DB 上调用特定的存储过程?
【问题讨论】:
-
看起来您必须通过将最终 Sql Query 与基于 SP 输入参数的条件连接起来来使用 Dynamic Sql
标签: sql database stored-procedures dynamic case