举几个例子有帮助吗?下面的所有输出结果到客户端,但你也可以OUTPUT INTO一个@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')
Run Code Online (Sandbox Code Playgroud)
返回
id c
----------- ----
1 A
2 B
3 C
Run Code Online (Sandbox Code Playgroud)
.
UPDATE T
SET c = CHAR(ASCII(c)+1)
/*Output before and after versions of each row*/
OUTPUT deleted.*, inserted.*
WHERE id IN (2,3)
Run Code Online (Sandbox Code Playgroud)
返回
id c id c
----------- ---- ----------- ----
2 B 2 C
3 C 3 D
Run Code Online (Sandbox Code Playgroud)
.
DELETE
FROM T
/*Output the row(s) that were deleted*/
OUTPUT deleted.*
WHERE DATEPART(second, getdate())%id = 0
Run Code Online (Sandbox Code Playgroud)
退货(例如)
id c
----------- ----
1 A
Run Code Online (Sandbox Code Playgroud)
在回复评论时,一些示例显示了如何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')
Run Code Online (Sandbox Code Playgroud)
如果您使用的是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
Run Code Online (Sandbox Code Playgroud)
但是如果插入目标参与PK/FK关系,您将收到错误消息.如果遇到此问题,您也可以使用此模式.
INSERT INTO @inserted
EXEC sp_executesql N'
INSERT INTO #T2(c)
OUTPUT inserted.id, inserted.c
VALUES (''D''),(''E'') '
Run Code Online (Sandbox Code Playgroud)