Задать несколько скалярных переменных из одной строки в SQL Server 2008? - PullRequest
4 голосов
/ 16 февраля 2010

В триггере у меня есть код вроде:

SET @var1 = (SELECT col1 FROM Inserted);
SET @var2 = (SELECT col2 FROM Inserted);

Можно ли написать выше в одну строку? Что-то концептуально вроде:

SET (@var1,@var2) = (SELECT col1,col2 FROM Inserted);

Очевидно, я попробовал вышеупомянутое, но безуспешно; я просто застрял с первым методом?

Даже если это возможно, это хорошая идея?

Спасибо!

Ответы [ 3 ]

8 голосов
/ 16 февраля 2010

да, используйте первый метод.

Или ...

SELECT
    @var1 = col1
    ,@var2 = col2
FROM
    Inserted;
2 голосов
/ 16 февраля 2010

Тем не менее, это главный красный флаг, если вы ожидаете установить значения переменных, подобные значениям в триггере. Обычно это означает, что триггер плохо спроектирован и нуждается в пересмотре. Этот код ожидает, что будет вставлена ​​только одна запись, и это не всегда так. При вставке или обновлении нескольких записей будет вставлено несколько записей, и триггер должен учитывать это (пожалуйста, без использования триггера !!!). Ни при каких обстоятельствах триггеры не должны быть написаны для обработки только вставок / обновлений или удалений только одной записи. Они должны быть написаны для обработки наборов данных.

Пример для вставки значений из вставленной в другую таблицу, где триггер находится в таблице1:

CREATE TRIGGER mytrigger on table1
AFTER INSERT
AS

INSERT table2 (field1, field2, field3)
SELECT field1, 'test', CASE WHEN field3 >10 THEN field3 ELSE 0 END
FROM inserted
0 голосов
/ 16 февраля 2010

Нет, это невозможно. SET принимает одну цель и значение. AFAIK.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...