sql server 带有OUTPUT的INSERT,DELETE,UPDATE
原文:sql server 带有OUTPUT的INSERT,DELETE,UPDATE
OUTPUT是SQL SERVER2005的新特性.可以从数据修改语句中返回输出.可以看作是"返回结果的DML".INSERT,DELETE,UPDATE均支持OUTPUT子句.在OUTPUT子句中,可以引用特殊表inserted和deleted.使用inserted和deleted表与在触发器中使用的非常相似.
在INSERT,DELETE,UPDATE中OUTPUT的区别
1.对于INSERT,可以引用inserted表以查询新行的属性.
2.对于DELETE,可以引用deleted表以查询旧行的属性.
3.对于UPDATE,使用deleted表查询被更新行在更改前的属性,用inserted表标识被更新行在更改后的值.
输出方式:
1.可以输出给调用方(客户端应用程序)
2.输出给表
3.两者皆可.
应用:
一.带有OUTPUT的INSERT的应用
对于包含自增列的表执行多行insert语句,同时想知道新的标识值时,在INSERT中使用OUTPUT子句非常方便.对于单行INSERT语句,这不成问题:SCOPE_IDENTITY函数即可实现.
- -- Generating Surrogate Keys for Customers
- USE tempdb;
- GO
- IF OBJECT_ID('dbo.CustomersDim') IS NOT NULL
- DROP TABLE dbo.CustomersDim;
- GO
- CREATE TABLE dbo.CustomersDim
- (
- KeyCol INT NOT NULL IDENTITY PRIMARY KEY,
- CustomerID NCHAR(5) NOT NULL,
- CompanyName NVARCHAR(40) NOT NULL,
- /* ... other columns ... */
- );
- -- Insert New Customers and Get their Surrogate Keys
- DECLARE @NewCusts TABLE
- (
- CustomerID NCHAR(5) NOT NULL PRIMARY KEY,
- KeyCol INT NOT NULL UNIQUE
- );
- INSERT INTO dbo.CustomersDim(CustomerID, CompanyName)
- OUTPUT inserted.CustomerID, inserted.KeyCol
- INTO @NewCusts
- -- OUTPUT inserted.CustomerID, inserted.KeyCol
- SELECT CustomerID, CompanyName
- FROM Northwind.dbo.Customers
- WHERE Country = N'UK';
- SELECT CustomerID, KeyCol FROM @NewCusts;
- GO
注意代码中被注释掉的第二个OUTPUT子句,后面没有INTO子句.如果还要输出返回给调用方,取消注释即可.这样,INSERT语句将包含两个OUTPUT子句.
示例2.
- USE AdventureWorks;
- GO
- CREATE TABLE TestTable (ID INT, TEXTVal VARCHAR(100))
- DECLARE @TmpTable TABLE (ID INT, TEXTVal VARCHAR(100))
- INSERT TestTable (ID, TEXTVal)
- OUTPUT Inserted.ID, Inserted.TEXTVal INTO @TmpTable
- VALUES (1,'FirstVal')
- INSERT TestTable (ID, TEXTVal)
- OUTPUT Inserted.ID, Inserted.TEXTVal INTO @TmpTable
- VALUES (2,'SecondVal')
- SELECT * FROM @TmpTable
- SELECT * FROM TestTable
- DROP TABLE TestTable
- GO
- USE AdventureWorks;
- GO
- CREATE TABLE TestTable (ID INT, TEXTVal VARCHAR(100))
- INSERT TestTable (ID, TEXTVal)
- OUTPUT Inserted.ID, Inserted.TEXTVal
- VALUES (1,'FirstVal')
- INSERT TestTable (ID, TEXTVal)
- OUTPUT Inserted.ID, Inserted.TEXTVal
- VALUES (2,'SecondVal')
- DROP TABLE TestTable
- GO
二.带有OUTPUT的DELETE的应用.
如果要删除数据的同时,还需要记录日志,或者归档数据.在DELETE中使用OUTPUT子句在适合不过了.
- USE AdventureWorks;
- GO
- CREATE TABLE TestTable (ID INT, TEXTVal VARCHAR(100))
- DECLARE @TmpTable TABLE (ID INT, TEXTVal VARCHAR(100))
- INSERT TestTable (ID, TEXTVal)
- VALUES (1,'FirstVal')
- INSERT TestTable (ID, TEXTVal)
- VALUES (2,'SecondVal')
- DELETE
- FROM TestTable
- OUTPUT Deleted.ID, Deleted.TEXTVal INTO @TmpTable
- WHERE ID IN (1,2)
- SELECT * FROM @TmpTable
- SELECT * FROM TestTable
- DROP TABLE TestTable
- GO
三.带有OUTPUT的UPDATE的应用
- USE AdventureWorks;
- GO
- CREATE TABLE TestTable (ID INT, TEXTVal VARCHAR(100))
- DECLARE @TmpTable TABLE (ID_New INT, TEXTVal_New VARCHAR(100),ID_Old INT, TEXTVal_Old VARCHAR(100))
- INSERT TestTable (ID, TEXTVal)
- VALUES (1,'FirstVal')
- INSERT TestTable (ID, TEXTVal)
- VALUES (2,'SecondVal')
- UPDATE TestTable
- SET TEXTVal = 'NewValue'
- OUTPUT Inserted.ID, Inserted.TEXTVal, Deleted.ID, Deleted.TEXTVal INTO @TmpTable
- WHERE ID IN (1,2)
- SELECT * FROM @TmpTable
- SELECT * FROM TestTable
- DROP TABLE TestTable
- GO
sql server 带有OUTPUT的INSERT,DELETE,UPDATE的更多相关文章
- 带有OUTPUT的INSERT,DELETE,UPDATE
原文地址:http://blog.sina.com.cn/s/blog_71460d950100nld2.html OUTPUT是SQL SERVER2005的新特性.可以从数据修改语句中返回输出.可 ...
- Use Select To Generate Any Insert/Delete/Update Statement
If you don't have the permission to generate script according to an existing db, but you have the re ...
- sqlserver触发器insert,delete,update
Create Trigger [dbo].[upemployee_kefyu_sale] on [dbo].[employee] for update as if update(FullName) b ...
- MySQL进阶10--DML数据操纵预言: insert/delete/update --多表连接修改/.多表连接删除/多表连接查询-- truncate 和 delete的区别
/* DML -- 数据操纵预言: insert/delete/update */ #一: 插入语句 /* 语法1: insert into 表名(列名,..,列名....) values(值1,值2 ...
- sql server 中一次insert 多条的写法
1.SELECT INTO FROM语句 注意此处 要求目标表Table2不存在,因为在插入时会自动创建表Table2,并将Table1中指定字段数据复制到Table2中.示例如下 2.INSERT ...
- sql server 存储过程 output 和return的使用 方法,详解
SQL Server目前正日益成为WindowNT操作系统上面最为重要的一种数据库管理系统,随着 SQL Server2000的推出,微软的这种数据库服务系统真正地实现了在WindowsNT/2000 ...
- SQL Server 2005 导出包含(insert into)数据的SQL脚本 (使用存储过程) 分类: 数据库
CREATE PROCEDURE dbo.UspOutputData @tablename sysname AS ) ) ) declare @xtype tinyint declare @name ...
- 使用mybatis执行对应的SQL Mapper配置中的insert、update、delete等标签操作,数据库记录不变
我使用springMVC集成mybatis,执行SQLMapper配置文件里的insert操作,发现程序没有报错,但数据库表里却没有刚才插入的记录.查了很多资料,终于在一篇博客上找到了答案:在执行完方 ...
- SQL Server 使用 OUTPUT做数据操作记录
OUTPUT 子句 可以在数据进行增删改的时候,可以返回受影响的行.先准备一张表 create table #t ( id int identity primary key ,name ) ) go ...
随机推荐
- 九 DIP 依赖倒置原则
首先看定义: 1.高层模块不依赖于低层模块,两者都应该依赖于抽象层 2.抽象不能依赖于细节,细节必须依赖于抽象 首先,模块是个抽象的概念,可以大到一个系统中的子系统作为一个模块,也可以是某个子系统中的 ...
- vue components & `@import css` bug
vue components @import css not support css3 @import https://github.com/vuejs/vue-loader/issues/138#i ...
- 在Linux上录制终端的操作
在Linux上录制终端的操作 来源 http://blog.51cto.com/stuart/1831570 一.安装基础软件包 1 [root@test software]# yum install ...
- HDU 2546 饭卡(01 背包)
链接:http://acm.hdu.edu.cn/showproblem.php?pid=2546 思路:需要首先处理一下的的01背包,当饭卡余额大于等于5时,是什么都能买的,所以题目要饭卡余额最小, ...
- echarts异步加载
echarts体积很大,在移动端使用异步加载是一种提高渲染速度的方法,结合webpack的做法如下: require.ensure([], function(require){ const echar ...
- bzoj4772 显而易见的数论
题意:http://www.lydsy.com/JudgeOnline/problem.php?id=4772 sol :这个题卡了我一整天QAQ 出题人简直丧心病狂,卡内存+卡常数QAQ 题意就是, ...
- poj 1037 三维dp
A decorative fence Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 7221 Accepted: 272 ...
- 遍历Collection集合中的6种方法:
下面的代码演示了遍历Collection集合的6种方法,注意Collection集合的遍历远不止于增强for循环,和迭代器两种. 代码如下: package com.qls.traverse; imp ...
- shortcut(NOIP模拟赛)(裸的排序)
原题: Description Mirek有一条每天从他家去大学工作的最喜欢的路.这个路径由若干个部分组成,且每个部分是10米长的直线.每一个部分是直线连接(没有拐弯)上一个部分或垂直连接上一个部分. ...
- 疫情控制(NOIP2012)庆祝2012满贯!٩(๑•◡-๑)۶ⒽⓤⒼ
丧病至极的D2T3啊! 好吧~ 先放个传送门~ 原题传送门 好吧,这道题呢.. 根据题意我们可以很明显的看出来 军队往上走的越多(在没到根节点之前),效益一定越大.. 所以可以分情况讨论: 对于无法走 ...