DML_The OUTPUT Clause

  1. /**/
  2. ----------------------------------------------------------------------------------------------
  3. --带有OUTPUTINSERT语句
  4. IF OBJECT_ID('dbo.T5','U') IS NOT NULL DROP TABLE dbo.T5
  5. CREATE TABLE dbo.T5
  6. (
  7. keycol INT NOT NULL IDENTITY(1,1) CONSTRAINT PK_T5 PRIMARY KEY,
  8. datacol NVARCHAR(40) NOT NULL
  9. );
  10.  
  11. --查询一下,可从这个 pubs.employee 表中插入值
  12. SELECT *
  13. FROM pubs.dbo.employee
  14. WHERE job_id = N'';
  15.  
  16. --SET IDENTITY_INSERT dbo.T5 ON;
  17. --dbcc checkident(T1,RESEED,0) --重置标识列为0
  18. --dbcc checkident(T1,RESEED,1) --重置标识列为0
  19.  
  20. INSERT INTO dbo.T5(datacol)
  21. OUTPUT inserted.keycol, inserted.datacol
  22. SELECT lname
  23. FROM pubs.dbo.employee
  24. WHERE job_id = N'';
  25.  
  26. SELECT * FROM T5
  27.  
  28. dbcc checkident(T5,RESEED,6) --重置标识列为6,下一个标识值将从 7 开始
  29. --a. 知识点
  30. --在对标识列进行重新规划相关列值的时候,需采用 checkident函数对表中标识值进行规整
  31. --1 dbcc checkident(‘表名’) 默认将表中的标识列的起始值初始化为 当前此列的最大值
  32. -- dbcc checkident(‘表名’,NORESEED) 返回当前标识列最大值
  33. --2 dbcc checkident(‘表名’,RESEED) 功能类似 dbcc checkident(‘表名’)
  34. --3 dbcc checkident(‘表名’,RESEED,新标识列起始值) 手动指定新标识列起始值
  35.  
  36. --b.知识点,再回顾 IDENTITY属性(Chapter 8. Data Modification: The IDENTITY Property
  37.  
  38. --将结果集导入到另外一个表中
  39. DECLARE @NewRows TABLE(keycol INT, datacol NVARCHAR(40));
  40. INSERT INTO dbo.T5(datacol)
  41. OUTPUT inserted.keycol, inserted.datacol
  42. INTO @NewRows
  43. SELECT lname
  44. FROM pubs.dbo.employee
  45. WHERE job_id = N'';
  46.  
  47. SELECT * FROM @NewRows;
  48. ----------------------------------------------------------------------------------------------
  49. --带有OUTPUTDELETE语句
  50.  
  51. SELECT * FROM dbo.Orders --尽管 testdb 库下有 Orders,我们还是从 Northwind.dbo.Orders 插入数据
  52. SELECT * FROM Northwind.dbo.Orders
  53. WHERE
  54.  
  55. IF OBJECT_ID('dbo.OrdersB','U') IS NOT NULL DROP TABLE dbo.OrdersB;
  56. SELECT * INTO dbo.OrdersB FROM Northwind.dbo.Orders ;
  57.  
  58. SELECT * FROM testdb.dbo.OrdersB
  59. -------------------------
  60. DELETE FROM dbo.OrdersB
  61. OUTPUT
  62. deleted.OrderID,
  63. deleted.OrderDate,
  64. deleted.EmployeeID,
  65. deleted.CustomerID
  66. WHERE OrderDate < ''
  67.  
  68. SELECT * FROM dbo.OrdersB
  69. -------------------------
  70.  
  71. --归档
  72. sp_help Northwind.dbo.Orders ( × )
  73. sp_help dbo.Orders ( × )
  74. sp_help Orders
  75.  
  76. -------------------------
  77. DECLARE @OrdersBB TABLE(OrderID INT, OrderDate datetime, EmployeeID INT, cUSTOMERid NVARCHAR(10))
  78. DELETE FROM dbo.OrdersB
  79. OUTPUT
  80. deleted.OrderID,
  81. deleted.OrderDate,
  82. deleted.EmployeeID,
  83. deleted.CustomerID
  84. INTO @OrdersBB
  85. WHERE OrderDate < ''
  86.  
  87. SELECT * FROM @OrdersBB
  88. -------------------------
  89.  
  90. ----------------------------------------------------------------------------------------------
  91. --带有OUTPUTUPDATE语句
  92. --
  93. SELECT * FROM Northwind.dbo.[Order Details];
  94. SELECT * FROM OrderDetails --检查一下之前 testdb中是否用过这个表,检查后没用过,讨厌这个表还要加中括号
  95.  
  96. IF OBJECT_ID('dbo.OrderDetails','U') IS NOT NULL DROP TABLE dbo.OrderDetails;
  97. SELECT * INTO dbo.OrderDetails FROM Northwind.dbo.[Order Details]
  98.  
  99. SELECT * FROM OrderDetails
  100. -------------------------------------
  101. UPDATE dbo.OrderDetails
  102. SET discount = discount + 0.03
  103. OUTPUT
  104. inserted.OrderID,
  105. inserted.ProductID,
  106. deleted.Discount AS olddiscount,
  107. inserted.Discount AS newdiscount
  108. WHERE ProductID = 51;
  109.  
  110. ------------------------------------
  111.  
  112. ----------------------------------------------------------------------------------------------
  113. --带有OUTPUTMERGE语句
  114. --此处使用之前 MERGE “合并的例子”
  115. --3.Merge语句 without And condition
  116.  
  117. --如果不记得字段值,就查询一下
  118. SELECT * FROM dbo.Customers
  119.  
  120. MERGE INTO dbo.Customers AS TGT
  121. USING dbo.CustomersStage AS SRC
  122. ON TGT.custid = SRC.custid
  123. WHEN MATCHED THEN --此处没有其他条件,即使来源表与目标表完全相同,也要更新目标表
  124. UPDATE SET
  125. TGT.companyname = SRC.companyname,
  126. TGT.phone = SRC.phone,
  127. TGT.address = SRC.address
  128. WHEN NOT MATCHED THEN
  129. INSERT (custid, companyname, phone, address)
  130. VALUES (SRC.custid,SRC.companyname, SRC.phone, SRC.address) ----->>>此处,去掉MERGE之前结尾的 ;
  131. OUTPUT $action, inserted.custid, ----->>>$action
  132. deleted.companyname AS oldcompanyname,
  133. inserted.companyname AS newcompanyname,
  134. deleted.phone as oldphone,
  135. inserted.phone as newphone,
  136. deleted.address as oldaddress,
  137. inserted.address as newaddress;

1) --带有OUTPUT的INSERT语句

......(略)

2) --带有OUTPUT的DELETE语句

......(略)
3) --带有OUTPUT的UPDATE语句

4) --带有OUTPUT的MERGE语句

DML_The OUTPUT Clause的更多相关文章

  1. A Beginner’s Guide to the OUTPUT Clause in SQL Server

    原文 A Beginner’s Guide to the OUTPUT Clause in SQL Server T-SQL supports the OUTPUT clause after the ...

  2. OUTPUT、Merge语句的使用

    新版本的数据库中增加了OUTPUT子句,这个很好用,详细的使用方式大家可以参考SQL的联机帮助文档.这里仅记录下常用的场景:在对数据库进行增删改的时候我们有时候需要记录日志(这里指将日志记录在DB中而 ...

  3. Sql Server系列:Insert语句

    1 INSERT语法 [ WITH <common_table_expression> [ ,...n ] ] INSERT { [ TOP ( expression ) [ PERCEN ...

  4. Sql Server系列:Update语句

    1 UPDATE语法结构 [ WITH <common_table_expression> [...n] ] UPDATE [ TOP ( expression ) [ PERCENT ] ...

  5. Sql Server系列:Delete语句

    数据的删除将删除表的部分或全部记录,删除时可以指定删除条件从而删除一条或多条记录.如果不指定删除条件,DELETE语句将删除表中全部的记录,清空数据表. 1 DELETE语法 [ WITH <c ...

  6. SQL入门经典(二) 之数据库基本查询、添加、更新和删除

    使用SQL查询: SQL查询基本语法: SELECT [ALL|DISTINCT]  [TOP (<expression>) [PERCENT] [WITH TIES] ] <col ...

  7. T-SQL 查询、修改数据表

    T-SQL修改表数据 INSERT语句 语法: INSERT [TOP(expression) [PERCENT]] [INTO] { <object> | rowset_function ...

  8. SQL Server T-SQL高级查询

    name like 'ja%'; select * from student where name not like '%[j,n]%'; select * from student where na ...

  9. CUBRID学习笔记 48查询优化

    cubrid的中sql查询语法 查询优化 c#,net,cubrid,教程,学习,笔记欢迎转载 ,转载时请保留作者信息.本文版权归本人所有,如有任何问题,请与我联系wang2650@sohu.com ...

随机推荐

  1. hdu6005找带权最小环

    题意:给你点和边,让你找最小环的权值,其权值是所有边权的和,没环输出-1. 解法:枚举每一条边,找到其端点,做最短路.. #include<cstdio> #include<cstr ...

  2. 模板:JSP公共内容

    page页面标签指令 <%@ page %> taglib标准标签指令 <%@ taglib %> 标签内基本属性 language="设置JSP页面使用的语言&qu ...

  3. Kubernetes学习笔记(四):服务

    服务介绍 服务是一种为一组相同功能的pod提供单一不变接入点的资源.当服务存在时,他的IP和端口不会改变.客户端通过IP和端口建立连接,这些连接会被路由到任何一个pod上.如此,客户端不需要知道每个单 ...

  4. ASP.NET Core Blazor Webassembly 之 组件

    关于组件 现在前端几大轮子全面组件化.组件让我们可以对常用的功能进行封装,以便复用.组件这东西对于搞.NET的同学其实并不陌生,以前ASP.NET WebForm的用户控件其实也是一种组件.它封装ht ...

  5. 【HTTP】Web及网络基础&HTTP基础

    HTTP协议访问Web 一.大体访问过程 1. 浏览器地址栏输入URL 2. 浏览器从服务端获取文件资源 3. 浏览器显示Web页面 二.HTTP的版本历史 1. HTTP/0.9 没有作为正式的标准 ...

  6. 剑指Offer之变态跳台阶

    题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 思路:由于青蛙每次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级,故除了 ...

  7. [Chrome插件开发]001.入门

    Chrome插件开发入门 Chrome扩展文件 Browser Actions(扩展图标) Page Actions(地址栏图标) popup弹出窗口 Background Pages后台页面 实战讲 ...

  8. excel操作数据实用技能

    写代码写习惯了,在做数据预处理时也总是习惯性地用python.pandas来做处理,但其实有时候根本不需要写代码,用excel也能达到目的,甚至比写代码快很多,写代码要半天,excel只要几秒钟.下面 ...

  9. Chisel3 - bind - Wire, Reg, MemPort

    https://mp.weixin.qq.com/s/AxYlRtAXjd55eoGX5l1W-A   模块(Module)从输入端口(input ports)接收输入,经过内部实现的转换逻辑,从输出 ...

  10. 关于URL优化的一些经验

    URL在搜索结果列表中时显示内容之一.设计网站结构时需要对目录及文件命名系统做事先规划.总的原则是首先从用户体验出发,URL应该清晰友好.方便记忆,然后才考虑URL对排名的影响.具体可以考虑以下几个方 ...