标签
SQL Server
Redis
MySQL
其它
Oracle
外部链接
SQL Server OUTPUT子句用法

数据来源【Customer】表

cur.png

1、OUTPUT返回新增数据应用

DECLARE @temp TABLE (id INT, Name VARCHAR(50))

INSERT INTO Customer
OUTPUT inserted.Id, inserted.Name
INTO @temp
VALUES ('马超', '42', 1, GETDATE(), '汉中'),
       ('马岱', '50', 1, GETDATE(), '汉中')
SELECT * FROM Customer
SELECT * FROM @temp

返回结果如下:

cur2.png

返回结果中我们可以看到新增的两条记录可以通过OUTPUT的方式返回,关键字inserted,INTO,inserted是用于检索新插入表的数据,INTO将数据插入临时表

2、OUTPUT返回删除的数据应用

接着上面新增的逻辑执行下面的SQL

DECLARE @temp TABLE (id INT, Name VARCHAR(50))
DELETE Customer OUTPUT deleted.Id, deleted.Name INTO @temp where Name = '孙尚香'
SELECT * FROM Customer
SELECT * FROM @temp

返回结果如下:

cur3.png

返回结果中我们可以看到【Customer】表删除了‘孙尚香’的记录,并将这条记录相关的信息记录到临时表中返回了,这里的关键字deleted,和inserted一样检索到被删除的记录

3、OUTPUT返回更新数据的应用

继续接着上面的结果执行下面的SQL

DECLARE @temp TABLE (id INT, Name VARCHAR(50))
UPDATE Customer SET Name = '刘玄德' OUTPUT inserted.Id, inserted.Name INTO @temp where Id = 1
SELECT * FROM Customer
SELECT * FROM @temp

返回结果如下:

cur4.png

返回结果中我们可以看到刘备名字更新成刘玄德了,并通过OUTPUT返回了更新的记录,这里也是使用了和插入相同的关键字inserted


特别说明:

更新和删除也是可以同时操作多条记录的录入下面的SQL

UPDATE Customer SET Intention = '蜀汉' OUTPUT inserted.Id, inserted.Intention WHERE Id IN (2,3)
SELECT * FROM Customer

上面的SQL同时也没有定义临时表来承接变更的记录,但是同样会返回变更的记录结果如下:

cur5.png

删除同理

DELETE Customer OUTPUT deleted.Id, deleted.Intention WHERE Id IN (2,3)
SELECT * FROM Customer

删除了Id记录为2和3的记录

6.png

扫一扫手机看
点击排行
订阅号
...