Рефераты | Рефераты по информатике, программированию | MSSQL 2005 (Yukon) – работа с очередями и асинхронная обработка данных
MSSQL 2005 (Yukon) – работа с очередями и асинхронная обработка данных
Категория реферата: Рефераты по информатике, программированию
Теги реферата: реферат биография, скачать на телефон шпаргалки
Добавил(а) на сайт: Kozin.
Как легко заметить, вся магия заключается в
конструкции OUTPUT INSERTED.*, обратите внимание, что в тестовой таблице
присутствует колонка identity, колонка со значением по умолчанию и колонка с
вычисляемым значением. При этом данные, полученные из inserted-таблички, содержат уже посчитанные значения в этих колонках. То есть табличка inserted
содержит фактические значения вставляемых данных уже после внутренних
вычислений, однако триггеры не учитываются, то есть отработка output происходит
после внутренних вычислений, но перед выполнением триггеров. Например, при
наличии триггера INSTEAD OF на таблице, изменяющая эту таблицу операция в
output вернет все данные, которые должны там быть, даже если в результате
работы триггера никаких изменений не произойдет.
ПРЕДУПРЕЖДЕНИЕ
На самом деле тут есть одно исключение, если на табличке висит триггер INSTEAD OF, то значение IDENTITY в OUTPUT
INSERTED вычислено не будет.
К выборке output можно применять различные выражения и
подзапросы, в том случае если они возвращают одно значение. Например, если есть
необходимость в момент изменения записи узнать, сколько времени прошло с
момента последнего обновления, то запрос может выглядеть примерно так:
UPDATE
OutputTest SET Data = newID(), [Time] = GetDate()
В результате выполнения такого запроса получится
рекордсет с одной записью, в которой будет содержаться количество секунд, прошедшее между изменениями записи.
В предыдущих примерах результат работы output
отправлялся прямо в клиентское приложение, но можно перенаправить его и в
таблицу – обычную, временную и табличную переменную. Сделать это довольно
просто:
DECLARE @tmp_output TABLE (
ID_t int, Time_t datetime,
Limit_t nvarchar(8),
Data_t nvarchar(50))
INSERT INTO OutputTest (Data)
OUTPUT inserted.* INTO
@tmp_output
VALUES (newid())
В данном случае вывод был перенаправлен в табличную
переменную. В то же время, на таблицы, в которые производится вывод, наложено
несколько ограничений:
На них не должно быть назначено триггеров. В принципе, триггер может быть назначен, но должен быть в состоянии Disabled.
Они не должны быть связаны внешним ключом с другими
таблицами, и на эту таблицу не должны ссылаться внешние ключи.
Не должно быть CHECK-ограничений и правил (rules) в
состоянии Enabled.
Вывод не может быть перенаправлен во view или функцию.
Очевидно, это связано с запретом триггеров в целевой таблице.
Сложно сказать, с чем эти ограничения связаны, но, скорее всего, это вызвано стремлением максимально облегчить и ускорить вставку
данных. Поскольку механизм output работает до триггеров, на довольно низком
уровне, то желание избавиться от тяжелой функциональности вполне объяснимо.
Рекомендуем скачать другие рефераты по теме: рефераты на казахском языке, реферат на тему время.