动态选择语句,将结果放入变量

时间:2011-06-10 14:04:42

标签: sql-server tsql

我已经做了一些搜索,没有找到我正在寻找的东西。我读过关于EXEC(@variable)的内容,这可能是我想要的,但是我无法让它工作。

这个想法是,有多个小组,我将根据发生的位置发送电子邮件。所以我需要将这些信息存储到一个变量中,然后我可以将其传递给sp_send_dbmail中的@recipients。

我正在使用一个案例,这很好,但现在我们添加的功能,我们只想根据他们正在工作的转移将电子邮件发送给某些用户。例如,第3班不想知道班次1发生的问题。

为此,我设置了另一个案例来基于shift声明一个变量,并删除了我的原始案例,并为shift a,b,c等创建了一个配置表。所以我要做的是< / p>

SELECT @shift FROM table发生此缺陷的位置。

这是我试图做的不起作用。

SET @EmailRecipients = 'SELECT' +  @EmailRecipientsCase + 'FROM ScrapReasonProcessGroups WHERE ID = @ProcessCounter'
SET @EmailRecipients = EXEC(@EmailRecipients)

2 个答案:

答案 0 :(得分:2)

使用没有动态SQL的CASE?

SELECT @EmailRecipients = CASE @EmailRecipientsCase
                              WHEN 'shifta' THEN ShiftA
                              WHEN 'shiftb' THEN ShiftB
                              WHEN 'shiftc' THEN ShiftC
                          END
FROM ScrapReasonProcessGroups
WHERE ID = @ProcessCounter

答案 1 :(得分:1)

假设您要从该查询中获取多个电子邮件地址,您需要将这些结果存储在临时表中。

CREATE TABLE #tmpEmail (
    EmailAddress varchar(200)
)

SET @EmailSQL = 'SELECT ' +  @EmailRecipientsCase + ' FROM ScrapReasonProcessGroups WHERE ID = ' + @ProcessCounter

INSERT INTO #tmpEmail
    (EmailAddress)
    EXEC (@EmailSQL)
相关问题