有人可以向我解释SQL Server输出子句吗?我已经阅读了MSDN文章,我仍然对此感到困惑。谢谢。
答案 0 :(得分:8)
举几个例子有帮助吗?以下都将结果输出到客户端,但您也可以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')
返回
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
回应一些示例,说明如何使用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,则可以use composable 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关系,您将收到错误消息。 If you encounter this problem you can also use this pattern
INSERT INTO @inserted
EXEC sp_executesql N'
INSERT INTO #T2(c)
OUTPUT inserted.id, inserted.c
VALUES (''D''),(''E'') '
答案 1 :(得分:1)
可以说是
如何找出删除,插入或更新的行?
您可以使用一些花哨的触发器代码或单独的SELECT,但OUTPUT子句可以轻松实现。 SELECT成为实际DELETE,INSERT或UPDATE
的一部分答案 2 :(得分:0)
OUTPUT
子句允许您将INSERT
或UPDATE
与SELECT
合并。
您可以OUTPUT
一个字段列表,查询将为受INSERT
/ UPDATE
影响的每一行返回一行。