【问题标题】:Dynamically Select from different DB's based on input to sproc根据对 sproc 的输入从不同的数据库中动态选择
【发布时间】: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


【解决方案1】:

我过去通过动态构建我想要执行的 SQL(基于传入的参数)然后使用 sp_executesql 执行 SQL 来完成此操作

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-24
    • 1970-01-01
    相关资源
    最近更新 更多