博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OUTPUT 作用在INSERT,UPDATE,DELETE后
阅读量:4567 次
发布时间:2019-06-08

本文共 2332 字,大约阅读时间需要 7 分钟。

返回受 INSERT、UPDATE、DELETE 或 MERGE 语句影响的各行中的信息,或返回基于受这些语句影响的各行的表达式。这些结果可以返回到处理应用程序,以供在确认消息、存档以及其他类似的应用程序要求中使用。也可以将这些结果插入表或表变量。另外,您可以捕获嵌入的 INSERT、UPDATE、DELETE 或 MERGE 语句中 OUTPUT 子句的结果,然后将这些结果插入目标表或视图。

 

SQL Server 2005 新增了一個 OUTPUT 子句的功能,你可以在 UPDATE 或  DELETE 子句中得到執行指令過後的資料,例如你想得知 UPDATE 某筆資料列時,該筆資料列更新前後的欄位值,此時,便可利用 OUTPUT 子句來解決了。

UPDATE 子句的應用,在此之前必須先了解當你執行 UPDATE 指令時,會同時記錄在資料庫裡的兩個虛擬資料表,分別是 deleted 舊的記錄表、Inserted 新的紀錄表。

因此資料庫的處理中實際上會包含紀錄原資料表內欲更新的資料列到 deteted 虛擬資料表,然後 delete 原資料表的資料列,然後再由 Inserted 虛擬資料表中 insert 新的資料列到原資料表中。

 

如果要在 DELETE 指令使用 OUTPUT 的話,僅能使用 deleted 虛擬資料表,方法可參考上述的 UPDATE 指令即可。

 
DELETE Sales.ShoppingCartItemOUTPUT DELETED.*;USE AdventureWorks;GODELETE TOP(1) dbo.DatabaseLog WITH (READPAST)OUTPUT deleted.*WHERE DatabaseLogID = 7;GO--A. 将 OUTPUT INTO 用于简单 INSERT 语句USE AdventureWorks;GODECLARE @MyTableVar table( ScrapReasonID smallint,                           Name varchar(50),                           ModifiedDate datetime);INSERT Production.ScrapReason    OUTPUT INSERTED.ScrapReasonID, INSERTED.Name, INSERTED.ModifiedDate        INTO @MyTableVarVALUES (N'Operator error', GETDATE());--Display the result set of the table variable.SELECT ScrapReasonID, Name, ModifiedDate FROM @MyTableVar;--Display the result set of the table.SELECT ScrapReasonID, Name, ModifiedDate FROM Production.ScrapReason;GO--B. 将 OUTPUT 用于 DELETE 语句USE AdventureWorks;GODELETE Sales.ShoppingCartItem    OUTPUT DELETED.* ;--Verify all rows in the table have been deleted.SELECT COUNT(*) AS [Rows in Table] FROM Sales.ShoppingCartItem;GO--C. 将 OUTPUT INTO 用于 UPDATE 语句USE AdventureWorks;GODECLARE @MyTableVar table(    EmpID int NOT NULL,    OldVacationHours int,    NewVacationHours int,    ModifiedDate datetime);UPDATE TOP (10) HumanResources.EmployeeSET VacationHours = VacationHours * 1.25 OUTPUT INSERTED.EmployeeID,       DELETED.VacationHours,       INSERTED.VacationHours,       INSERTED.ModifiedDateINTO @MyTableVar;--Display the result set of the table variable.SELECT EmpID, OldVacationHours, NewVacationHours, ModifiedDateFROM @MyTableVar;GO--Display the result set of the table.--Note that ModifiedDate reflects the value generated by an--AFTER UPDATE trigger.SELECT TOP (10) EmployeeID, VacationHours, ModifiedDateFROM HumanResources.Employee;GO 

 

帮助文件的URL:

转载于:https://www.cnblogs.com/aji88/archive/2010/02/24/1672446.html

你可能感兴趣的文章
Unity UGUI知识点
查看>>
全排列函数
查看>>
poj2195Going Home(最小费用最大流)
查看>>
Oracle回收站的清理方法
查看>>
CentOS 7.2 (mini) 里iptables防火墙怎么关闭?
查看>>
怎样关闭“粘滞键”?
查看>>
Telnet自动登录
查看>>
ionic笔记
查看>>
ORACLE1.12-事实表,维表,多对多
查看>>
百度编辑器UEditor抓取远程图片保存到图片服务器,或上传到ftp服务器的问题
查看>>
iOS - Block产生Memory Leaks循环引用导致的内存泄漏以及解决方案
查看>>
Java中的String数据类型
查看>>
Linux下压缩mp3文件
查看>>
ASIHTTPRequest-Cookie的使用
查看>>
一篇文章彻底弄清ARC始末
查看>>
poj1606 Jugs(BFS)
查看>>
HDU 1166 敌兵布阵(线段树 单点更新)
查看>>
wget: command not found的两种解决方
查看>>
XDoclet学习
查看>>
安利一下近期做的几道线段树入门题
查看>>