Некоторые примеры помогают? Ниже приведены все результаты для клиента, но вы также можете OUTPUT INTO
a @table_variable
(или стандартную таблицу при определенных условиях)
create table T
(
id int identity(1,1),
c char(1)
)
insert into T(c)
OUTPUT inserted.* /*Output Inserted Rows - shows the ids that were allocated*/
values ('A'),('B'),('C')
Возвращает
id c
----------- ----
1 A
2 B
3 C
.
UPDATE T
SET c = CHAR(ASCII(c)+1)
/*Output before and after versions of each row*/
OUTPUT deleted.*, inserted.*
WHERE id IN (2,3)
Возвращает
id c id c
----------- ---- ----------- ----
2 B 2 C
3 C 3 D
.
DELETE
FROM T
/*Output the row(s) that were deleted*/
OUTPUT deleted.*
WHERE DATEPART(second, getdate())%id = 0
Возвращает (например)
id c
----------- ----
1 A
Edit:
В ответ на комментарий несколько примеров, показывающих, как OUTPUT
может использоваться для вставки в таблицу.
CREATE TABLE #T2
(
id UNIQUEIDENTIFIER DEFAULT NEWSEQUENTIALID(),
c CHAR(1)
)
DECLARE @inserted TABLE
(
id UNIQUEIDENTIFIER,
c CHAR(1)
)
INSERT INTO #T2(c)
OUTPUT inserted.id, inserted.c
INTO @inserted
VALUES ('A')
Если вы используете SQL Server 2008, вы можете использовать составной DML
INSERT INTO @inserted
SELECT I.id, I.c
FROM
(
INSERT INTO #T2(c)
OUTPUT inserted.id, inserted.c
VALUES ('B'),('C')
) AS I
WHERE c <> 'C' --Only add rows of interest to @inserted table
Но вы получите сообщение об ошибке, если цель вставки участвует в отношениях PK / FK. Если вы столкнулись с этой проблемой, вы также можете использовать этот шаблон .
INSERT INTO @inserted
EXEC sp_executesql N'
INSERT INTO #T2(c)
OUTPUT inserted.id, inserted.c
VALUES (''D''),(''E'') '