T-SQL使用变量查询表

时间:2014-01-13 17:36:54

标签: sql sql-server tsql

我的任务是更新存储过程,我正在尝试找出执行选择的最有效方法。以下是当前代码,vaultIDclientID是输入参数:

SELECT 
   @siteID = Site.siteID, 
   @siteGroupID = Site.siteGroupID,
   @customerID = Customer.customerID
FROM 
   Customer
INNER JOIN 
   Site ON Customer.siteID = Site.siteID
WHERE 
   Site.phoneNumberIVR = @vaultID 
   AND Site.production = 1
   AND Customer.clientID = @clientID

我正在处理的更新与@clientID变量有关。如果记录具有特定@siteGroupID,则clientID需要在收到时传入。如果记录具有不同类型的@siteGroupID,则@clientID变量需要附加特定前缀。该前缀也将存储在站点表中。

我意识到我最初可以调用站点表来获取前缀,然后修改@clientID变量,但我试图弄清楚是否有办法只用一个呼叫。我一直在尝试不同的案例陈述,但我不确定这是否可行。

1 个答案:

答案 0 :(得分:1)

如果我能正确理解您的问题,那么您应该可以在CASE中根据自己的条件提出SELECT进行追加:

SELECT 
    @siteID = Site.siteID, 
    @siteGroupID = Site.siteGroupID,
    @customerID = Customer.customerID,
    @clientID = 
        CASE
            WHEN Site.siteGroupID = 1234 THEN Site.Prefix + @clientID
            ELSE @clientID
        END
FROM 
    Customer
    inner join Site on Customer.siteID = Site.siteID
WHERE 
    Site.phoneNumberIVR = @vaultID 
    and Site.production = 1
    and Customer.clientID = @clientID

当然,根据@clientIDSite.Prefix的数据类型,您可能需要执行除简单+之外的其他操作才能执行追加操作。例如,如果两者都是integer数据类型,则可以追加一些CONVERT次调用:

@clientID = CONVERT(integer, CONVERT(varchar, Site.Prefix) + CONVERT(varchar, @clientID))