DML_The OUTPUT Clause

/**/
----------------------------------------------------------------------------------------------
--带有OUTPUT的INSERT语句
IF OBJECT_ID('dbo.T5','U') IS NOT NULL DROP TABLE dbo.T5
CREATE TABLE dbo.T5
(
keycol INT NOT NULL IDENTITY(1,1) CONSTRAINT PK_T5 PRIMARY KEY,
datacol NVARCHAR(40) NOT NULL
); --查询一下,可从这个 pubs.employee 表中插入值
SELECT *
FROM pubs.dbo.employee
WHERE job_id = N''; --SET IDENTITY_INSERT dbo.T5 ON;
--dbcc checkident(T1,RESEED,0) --重置标识列为0
--dbcc checkident(T1,RESEED,1) --重置标识列为0 INSERT INTO dbo.T5(datacol)
OUTPUT inserted.keycol, inserted.datacol
SELECT lname
FROM pubs.dbo.employee
WHERE job_id = N''; SELECT * FROM T5 dbcc checkident(T5,RESEED,6) --重置标识列为6,下一个标识值将从 7 开始
--a. 知识点
--在对标识列进行重新规划相关列值的时候,需采用 checkident函数对表中标识值进行规整
--1 dbcc checkident(‘表名’) 默认将表中的标识列的起始值初始化为 当前此列的最大值
-- dbcc checkident(‘表名’,NORESEED) 返回当前标识列最大值
--2 dbcc checkident(‘表名’,RESEED) 功能类似 dbcc checkident(‘表名’)
--3 dbcc checkident(‘表名’,RESEED,新标识列起始值) 手动指定新标识列起始值 --b.知识点,再回顾 IDENTITY属性(Chapter 8. Data Modification: The IDENTITY Property) --将结果集导入到另外一个表中
DECLARE @NewRows TABLE(keycol INT, datacol NVARCHAR(40));
INSERT INTO dbo.T5(datacol)
OUTPUT inserted.keycol, inserted.datacol
INTO @NewRows
SELECT lname
FROM pubs.dbo.employee
WHERE job_id = N''; SELECT * FROM @NewRows;
----------------------------------------------------------------------------------------------
--带有OUTPUT的DELETE语句 SELECT * FROM dbo.Orders --尽管 testdb 库下有 Orders,我们还是从 Northwind.dbo.Orders 插入数据
SELECT * FROM Northwind.dbo.Orders
WHERE IF OBJECT_ID('dbo.OrdersB','U') IS NOT NULL DROP TABLE dbo.OrdersB;
SELECT * INTO dbo.OrdersB FROM Northwind.dbo.Orders ; SELECT * FROM testdb.dbo.OrdersB
-------------------------
DELETE FROM dbo.OrdersB
OUTPUT
deleted.OrderID,
deleted.OrderDate,
deleted.EmployeeID,
deleted.CustomerID
WHERE OrderDate < '' SELECT * FROM dbo.OrdersB
------------------------- --归档
sp_help Northwind.dbo.Orders ( × )
sp_help dbo.Orders ( × )
sp_help Orders -------------------------
DECLARE @OrdersBB TABLE(OrderID INT, OrderDate datetime, EmployeeID INT, cUSTOMERid NVARCHAR(10))
DELETE FROM dbo.OrdersB
OUTPUT
deleted.OrderID,
deleted.OrderDate,
deleted.EmployeeID,
deleted.CustomerID
INTO @OrdersBB
WHERE OrderDate < '' SELECT * FROM @OrdersBB
------------------------- ----------------------------------------------------------------------------------------------
--带有OUTPUT的UPDATE语句
--
SELECT * FROM Northwind.dbo.[Order Details];
SELECT * FROM OrderDetails --检查一下之前 testdb中是否用过这个表,检查后没用过,讨厌这个表还要加中括号 IF OBJECT_ID('dbo.OrderDetails','U') IS NOT NULL DROP TABLE dbo.OrderDetails;
SELECT * INTO dbo.OrderDetails FROM Northwind.dbo.[Order Details] SELECT * FROM OrderDetails
-------------------------------------
UPDATE dbo.OrderDetails
SET discount = discount + 0.03
OUTPUT
inserted.OrderID,
inserted.ProductID,
deleted.Discount AS olddiscount,
inserted.Discount AS newdiscount
WHERE ProductID = 51; ------------------------------------ ----------------------------------------------------------------------------------------------
--带有OUTPUT的MERGE语句
--此处使用之前 MERGE中 “合并的例子”
--3.Merge语句 without And condition --如果不记得字段值,就查询一下
SELECT * FROM dbo.Customers MERGE INTO dbo.Customers AS TGT
USING dbo.CustomersStage AS SRC
ON TGT.custid = SRC.custid
WHEN MATCHED THEN --此处没有其他条件,即使来源表与目标表完全相同,也要更新目标表
UPDATE SET
TGT.companyname = SRC.companyname,
TGT.phone = SRC.phone,
TGT.address = SRC.address
WHEN NOT MATCHED THEN
INSERT (custid, companyname, phone, address)
VALUES (SRC.custid,SRC.companyname, SRC.phone, SRC.address) ----->>>此处,去掉MERGE之前结尾的 ;
OUTPUT $action, inserted.custid, ----->>>$action
deleted.companyname AS oldcompanyname,
inserted.companyname AS newcompanyname,
deleted.phone as oldphone,
inserted.phone as newphone,
deleted.address as oldaddress,
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. 王艳 201771010127《面向对象程序设计(java)》第七周学习总结

    1.实验目的与要求 (1)进一步理解4个成员访问权限修饰符的用途: (2)掌握Object类的常用API用法: (3)掌握ArrayList类用法与常用API: (4)掌握枚举类使用方法: (5)结合 ...

  2. tableView reloadData页面跳动问题

    参考:https://www.jianshu.com/p/5f033fdd4ddb 一般情况下 if (@available(iOS 11.0, *)) { self.estimatedRowHeig ...

  3. ShoneSharp语言(S#)的设计和使用介绍系列(10)— 富家子弟“语句“不炫富

    ShoneSharp语言(S#)的设计和使用介绍 系列(10)— 富家子弟“语句“不炫富 作者:Shone 声明:原创文章欢迎转载,但请注明出处,https://www.cnblogs.com/Sho ...

  4. python时间戳和时间字符串的转换

    # -*- coding: utf-8 -*-# date=2020/3/27import timeimport uuid def getTimestamp_1770(): now_1770 = ro ...

  5. web自动化之浏览器的窗口切换

    from selenium import webdriver from selenium.webdriver.support.wait import WebDriverWait from seleni ...

  6. django-模型层(ORM语法)

    今日内容概要(重要) 模型层(ORM语法):跟数据库打交道的 单表查询(增删改查) 常见的十几种查询方法 神奇的双下划线查询 多表操作 外键字段的增删改查 跨表查询(重点) 子查询 联表查询 今日内容 ...

  7. 新手福利!Blazor 从入门到砖家系列教程(你真的可以成为砖家)

    注意 作为 Blazor 新手的你(不是新手就当没看到这句话),请一定走完本教程再去上手其他组件库 标题跟你开个玩笑,你真的可以通过这个系列教程成为专家! 深入浅出,我翻译过程中都学到了很多. 我们不 ...

  8. WALT(Window Assisted Load Tracking)学习

    QCOM平台使用WALT(Window Assisted Load Tracking)作为CPU load tracking的方法:相对地,ARM使用的是PELT(Per-Entity Load Tr ...

  9. DDD之3实体和值对象

    图中是一个别墅的模型,代表实体,可以真实的看得到.那么在DDD设计方法论中,实体和值对象是什么呢? 背景 实体和值对象是领域模型中的领域对象,是组成领域模型的基础单元,一起实现实体最基本的核心领域逻辑 ...

  10. Java实现 LeetCode 477 汉明距离总和

    477. 汉明距离总和 两个整数的 汉明距离 指的是这两个数字的二进制数对应位不同的数量. 计算一个数组中,任意两个数之间汉明距离的总和. 示例: 输入: 4, 14, 2 输出: 6 解释: 在二进 ...