Динамический оператор Select, поместите результат в переменную - PullRequest
0 голосов
/ 10 июня 2011

Я провел некоторые поиски, и ничего не пришло к тому, что я ищу точно. Я читал о EXEC (@variable), и это МОЖЕТ быть тем, что я хочу, но я не могу заставить его работать.

Идея в том, что есть несколько групп, которым я буду отправлять электронные письма в зависимости от того, где что-то произошло. Поэтому мне нужно сохранить эту информацию в переменную, которую я затем могу передать @recipients в sp_send_dbmail.

Я использовал для этого случай, который был хорош, но теперь мы добавляем в функциональность то, что мы хотим отправлять электронные письма только определенным пользователям в зависимости от того, в какую смену они работали. Например, третья смена не хочет знать о проблеме, которая произошла в смену 1.

Чтобы сделать это, я настроил еще один случай, чтобы объявить переменную, основанную на shift, и удалил свой исходный случай, и создал таблицу конфигурации для shift a, b, c и т. Д. Итак, что я хочу сделать, это

SELECT @shift FROM table ГДЕ место, где произошел этот дефект.

вот что я пытался сделать, но это не работает.

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

Ответы [ 2 ]

2 голосов
/ 10 июня 2011

Использовать CASE без динамического SQL?

SELECT @EmailRecipients = CASE @EmailRecipientsCase
                              WHEN 'shifta' THEN ShiftA
                              WHEN 'shiftb' THEN ShiftB
                              WHEN 'shiftc' THEN ShiftC
                          END
FROM ScrapReasonProcessGroups
WHERE ID = @ProcessCounter
1 голос
/ 10 июня 2011

Предполагая, что из этого запроса вы получите более одного адреса электронной почты, вы захотите сохранить эти результаты во временной таблице.

CREATE TABLE #tmpEmail (
    EmailAddress varchar(200)
)

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

INSERT INTO #tmpEmail
    (EmailAddress)
    EXEC (@EmailSQL)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...