说一下output子句

Output子句日常灰常有用,而且用的地方也挺多,但是确好多时候被我们忽视,今天我就也简单扫盲一下这个语句的用法。

Output子句

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

下面做下这4种类型的output 用法

先搞个测试表

CREATE TABLE [dbo].[AAA1]
(
[ID] [int] PRIMARY KEY,
[Col2] VARCHAR(100)
) ON [PRIMARY]
GOCREATE TABLE [dbo].[AAA2]
(
[ID] [int] PRIMARY KEY,
[Col2] VARCHAR(100)
) ON [PRIMARY]
GO

1、 insert 

INSERT INTO dbo.AAA1( ID, Col2 )
OUTPUT Inserted.ID,Inserted.Col2 INTO AAA2(ID,Col2)
VALUES  ( 4,'1' )

这样就可以在插入AAA1 的同时将插入的结果输出插入到 AAA2 里面。

我想到有2个常用的场景

1、有些功能想要写入记录的时候也同时插入一个记录表来记录操作,很多时候会想起触发器。如果只是如此单纯的操作,那么真还不如使用一句output来得实惠了。但是这个也看具体场景,不扯太远。

2、当我们单条插入的时候,要捕获ID的话还可以使用  SCOPE_IDENTITY() 来获取,但是如果批量的时候,要获取插入的自增列对应的列,就可以使用OutPut 来捕获了~

 

2、update 

UPDATE AAA1 SET col2 = 'BB'OUTPUT Deleted.ID,Deleted.Col2,Inserted.ID,Inserted.Col2WHERE ID = 1

在update 里面呢,就会存在有 Deleted 和 inserted 2个临时表,这个就类似于 触发器里面的 deleted表和 inserted 表了。可以捕捉到更新前后的值

 

3、deleted 

DELETE FROM dbo.AAA1OUTPUT Deleted.ID,Deleted.Col2WHERE ID = 1

delete 也就是差不多,语法是一样的。

 

4、 Merge 

MERGE dbo.AAA1 AS TAR
USING (SELECT 1,'a'
) AS SOUR(ID,Col2)
ON 1 = 0
WHEN NOT MATCHED THEN INSERT (ID,Col2) VALUES (SOUR.ID,SOUR.Col2)
OUTPUT $action,Deleted.*,Inserted.*;

Merge就有一个独特一点的 $Action 的东东,这个的值会表示它的行动,有 'INSERT','UPDATE','DELETE' 3种动作。对于要捕捉在Merge里面的变化就很好用啦~

Merge还有一点比较好用,可以把没有插入到目标的列,也带到Output里面来~这个就可以清晰的看到每一行数据的对应情况了

 

但是Output虽好,但是还是会有一些限制,有些我遇到过,有些还没测试过。(以下内容出自联机文档)

  • 整个操作是原子的。 INSERT 语句和包含 OUTPUT 子句的嵌套 DML 语句要么都执行,要么整个语句都失败。

  • 以下限制适用于外层 INSERT 语句的目标:

    • 目标不能为远程表、视图或公用表表达式。 (这个好理解,这个是指insert 的对象,并非指 output into 的对象)

    • 目标不能有 FOREIGN KEY 约束,或者被 FOREIGN KEY 约束所引用。 (就是output into 的目标表不能带外键)

    • 不能对目标定义触发器。

    • 目标不能参与合并复制或事务复制的可更新订阅。

  • 对于嵌套的 DML 语句有以下限制:

    • 目标不能为远程表或分区视图。

    • 源本身不能包含 <dml_table_source> 子句。

  • 在包含 <dml_table_source> 子句的 INSERT 语句中不支持 OUTPUT INTO 子句。

  • @@ROWCOUNT 返回仅由外层 INSERT 语句插入的行。

  • @@IDENTITY、SCOPE_IDENTITY 和 IDENT_CURRENT 仅返回由嵌套的 DML 语句生成的标识值,而不返回由外层 INSERT 语句生成的标识值。

  • 查询通知将语句作为单个实体进行处理,并且即使重大更改是来自外层 INSERT 语句本身,所创建的任何消息的类型也将是嵌套 DML 的类型。

  • 在 <dml_table_source> 子句中,SELECT 和 WHERE 子句不能包括子查询、聚合函数、排名函数、全文谓词、执行数据访问的用户定义函数或是 TEXTPTR 函数。

 

其它东西~遇到了在继续补充

 

 

 

 

 

 

转载于:https://www.cnblogs.com/Gin-23333/p/5169321.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/404338.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[react] 在使用react过程中你都踩过哪些坑?你是怎么填坑的?

[react] 在使用react过程中你都踩过哪些坑&#xff1f;你是怎么填坑的&#xff1f; 组件不像Vue一样有(beforeRouteLeave, beforeRouteEnter)路由守卫Hooks中的闭包渲染问题 import { useState } from react;const Demo () > {const [count, setCount] useState(0);const…

查询优化器内核剖析第四篇:从一个实例看执行计划

查询优化器内核剖析第四篇&#xff1a;从一个实例看执行计划系列文章索引&#xff1a; 查询优化器内核剖析第一篇 查询优化器内核剖析第二篇&#xff1a;产生候选执行计划&执行计划成本估算 查询优化器内核剖析第三篇&#xff1a;查询的执行与计划的缓存 &…

linux 查看端口使用情况

From: http://blog.csdn.net/zwhfyy/article/details/3971523 -bash-3.00# netstat -tln netstat -tln 命令是用来查看linux的端口使用情况     /etc/init.d/vsftp start 是用来启动ftp端口~&#xff01;     看文件/etc/services     netstat     查看已经连接的…

POJ3764 The xor-longest Path(Trie树)

题目给一棵有边权的树&#xff0c;问树上任意两点路径上的边异或值最多是多少。 记录每个点u到根路径的异或值xor[u]&#xff0c;那么任意两点u、v路径的异或值就是xor[u]^xor[v]。 于是这个问题就变成了从n个数中任取两个数异或&#xff0c;求最大异或值&#xff0c;这是个经典…

[react] 说说react的生命周期有哪些?

[react] 说说react的生命周期有哪些&#xff1f; 装载阶段 组件第一次被渲染时的阶段&#xff0c;这一阶段相关的生命周期函数有&#xff1a; constructor componentWillMount render componentDidMount 更新阶段 如果组件中的 state 或者 props 发生了改变&#xff0c;React…

【python】os.getcwd和getcwdu

print os.getcwd(), type(os.getcwd()) print os.getcwdu(), type(os.getcwdu()) 结果如下&#xff1a; C:\Users\Administrator\PycharmProjects\mypython_1 <type str>C:\Users\Administrator\PycharmProjects\mypython_1 <type unicode> 可见&#xff0c;一个是…

established关键字

1&#xff0c;首先回顾一下TCP协议&#xff1a; TCP数据包中有六个标志位(Code Bits)&#xff1a;6 位标志域。表示为&#xff1a;紧急标志、有意义的应答标志、推、重置连接标志、同步序列号标志、完成发送数据标志。按照顺序排列是&#xff1a;URG、ACK、PSH、RST、SYN、FIN。…

可变参数的宏定义

From: http://www.cnblogs.com/caosiyang/archive/2012/08/21/2648870.html printf()和fprintf()这些输出函数的参数是可变的&#xff0c;在调试程序时&#xff0c;你可能希望定义自己的参数可变的输出函数&#xff0c; 那么可变参数宏会是一个选择。 C99中规定宏可以像函数…

[react] react中除了在构造函数中绑定this,还有别的方式吗?

[react] react中除了在构造函数中绑定this,还有别的方式吗&#xff1f; 1&#xff1a;函数定义的时候使用箭头函数 2&#xff1a;函数调用是使用bind绑定this 个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家…

【Objective-C】玩转OC:正式开始自学OC

实话说吧&#xff0c;我觉得同时自学太多语言真是不太好&#xff0c;寒假给自己的任务太重了&#xff0c;但是没有办法啊&#xff0c;谁叫我参加了“我们的益达”的iOS组呢&#xff0c;可是承诺了寒假要好好学的&#xff0c;所以只能挖掘自己的时间、精力和潜力咯O(∩_∩)O哈哈…

从微软的DBML文件中我们能学到什么(它告诉了我们什么是微软的重中之重)~三 分部类是否破坏了单一职责...

一 DBContext的构造方法&#xff0c;方法的重载 二 DBContext实例中&#xff0c;表实体对象是怎么被加入的 三 分部类是否破坏了单一职责 四 分部方法从另一方面定义了类型的操作规范 五 LINQ实体类中对属性的赋值&#xff0c;变化前与变化后SendPropertyChanging与SendPropert…

Makefile中支持的函数大全

From: http://blog.chinaunix.net/uid-25365622-id-3056374.html 一.描述 Makefile的函数调用&#xff0c;很像变量的使用&#xff0c;也是以“$”来标识的&#xff0c;其语法如下&#xff1a; $(<function> <arguments> ) 或是 ${<function> <argum…

[react] 和Component两者的区别是什么

[react] 和Component两者的区别是什么 组件的state或者props更新都会触发render(),同时也会导致子组件render()重新渲染&#xff1b;当我们不想子组件更新时&#xff0c;需要手动在shouldUpdateComponent当中返回false;pureComponent帮我们做了这部分工作 个人简介 我是歌谣…

还是引用

1 #include <iostream>2 using namespace std;3 4 int getA1()5 {6 int a;7 a 10;8 return a; //复制一份交给主函数相关变量,然后自己消失,只是返回一个值,可能存在于除内存外的其他地方.9 } 10 11 int& getA2() 12 { 13 int a; 14 a 10; 15…

Nginx+Php(FastCGI、Php-fpm)+Mysql+Zend+Memcache+Phpmyadmin+MongoDB+TT安装

源码包下载 wget http://www.monkey.org/~provos/libevent-1.2.tar.gz wget http://www.danga.com/memcached/dist/memcached-1.2.0.tar.gz wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-1.8.0-rc2.tgz wget http://blog.s135.com/soft/linux/nginx_php/rpm/x8…

[react] 如何解决引用类型在pureComponent下修改值的时候,页面不渲染的问题?

[react] 如何解决引用类型在pureComponent下修改值的时候&#xff0c;页面不渲染的问题&#xff1f; 不要在state或者props当中修改数组或者对象 通过使用es6的assign方法或者数组的扩展运算符或者使用第三方库&#xff0c;强制返回一个新的对象 (页面为什么不渲染) 是因为组件…

Makefile中自定义函数的调用

From: http://www.cnblogs.com/MyEyes/archive/2012/01/12/2320589.html 自己学习脚印&#xff0c;不喜勿喷&#xff0c;谢谢 ~ Makefile中函数定义&#xff1a; external/genext2fs/Config.mk # $(1): src directory # $(2): output file # $(3): label (if any) # $(4): …

python selenium ---键盘事件

转自&#xff1a;http://www.cnblogs.com/fnng/p/3258946.html 本节重点&#xff1a; l 键盘按键用法l 键盘组合键用法l send_keys() 输入中文运行报错问题键盘按键键用法&#xff1a; #codingutf-8 from selenium import webdriver from selenium.webdriver.common.keys impor…

Android.自定义控件的实现 (转载)

尊重他人劳动成果&#xff0c;转载请注明出处。 转自&#xff1a;http://kandy0619.blog.163.com/blog/static/64344345201012325939280/ 可能是一直都在做Web的富客户端开发的缘故吧&#xff0c;在接触Android之后&#xff0c;发现其控件实在惨不忍睹&#xff08;不知道是否说…

React-Router面试题汇总

[react-router] React-Router怎么获取URL的参数&#xff1f; [react-router] 在history模式中push和replace有什么区别&#xff1f; [react-router] React-Router 4中&#xff1c;Router&#xff1e;组件有几种类型&#xff1f; [react-router] React-Router怎么设置重定向…