Реферат: Новые возможности T-SQL в MS SQL Server 2005
inserted, для команды INSERT
deleted, для команды DELETE
В случае использования функции OUTPUT в запросе UPDATE, измененные данные будут доступны в псевдо таблице inserted, а данные, которые подверглись изменению в псевдо таблице deleted.
Функция OUTPUT не может быть использована в запросе INSERT, в котором вставка проводится в представление данных (View), а также для вставки измененных данных в представление или табличную функцию.
Также стоит помнить о том, что OUTPUT не гарантирует, что элементы будут вставляться в таблицу в том же порядке, в котором происходит применение изменений. При этом, если в процессе выполнения запроса UPDATE изменяются какие-либо переменные или параметры, то OUTPUT возвращает не модифицированные значения параметров или переменных, то есть такие значения, которые переменные или параметры имели до выполнения запроса.
Применения функции OUTPUT
Выборка вставленных данных
Иногда бывает удобно получить в качестве результата выполнения процедуры, вставляющей данные в таблицу, результирующую строку, особенно когда эта строка содержит колонку с уникальным значением. Используя OUTPUT это можно следующим образом:
DECLARE @TempBrands TABLE (BrandID int, [Name] nvarchar(32)) INSERT INTO Brands([Name]) OUTPUT inserted.* INTO @TempBrands VALUES(@Name) SELECT * FROM @TempBrands |
Отметим, что этот пример показывает работу с одной строкой, поскольку при втавке большого количества строк, поряок следования может быть нарушен (как уже было написано выше, OUTPUT не гарантирует порядок строк) и использовать значения BrandID в вызывающем коде без дополнителных проверок будет проблематично.
Конечно, нет никакой проблемы в том, чтобы получить в результате запроса BrandID, не используя OUTPUT, поскольку обычно все данные уже имеются в вызывающем процедуру коде (они же и передаются в качестве аргументов самой процедуре), за исключением элемента с уникальным значением.
INSERT INTO Brands([Name]) VALUES(@Name) SELECT @@IDENTITY |
Реализация функциональности очереди
Функция OUTPUT также позволяет удобно реализовать функциональность очереди, «извлекая» из таблицы запись, при этом удалять ее. Например, если потребуется функциональность очередей на выполнение заказа, то необходимо будет создать таблицу-очередь, например
CREATE TABLE [Queue]( [QueueID] [int] IDENTITY(1,1) NOT NULL, [OrderID] [int] NOT NULL ) |
и с помощью нее реализовать необходимую функциональность, используя функцию OUTPUT:
DECLARE @Queue TABLE (QueueID int, OrderID int) DELETE TOP 1 FROM [Queue] ORDER BY QueueID OUTPUT deleted.QueueID, deleted.OrderID INTO @Queue SELECT * FROM @Queue |
Без использования функции OUTPUT, код получается несколько более громоздким:
DECLARE @Queue TABLE (QueueID int, OrderID int) К-во Просмотров: 556
Бесплатно скачать Реферат: Новые возможности T-SQL в MS SQL Server 2005
|