• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >MsSql > SQLServer 2008 Merge语句的OUTPUT功能

SQLServer 2008 Merge语句的OUTPUT功能

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-11

通过本文主要向大家介绍了sqlserver2008语句,sqlserver update语句,sqlserver2005语句,sqlserver insert语句,merge output等相关知识,希望本文的分享对您有所帮助

下面介绍一下把Output同2008的新T-SQL语句Merge组合使用的方法:
新建下面表:

代码如下:</div> CREATE TABLE Book(
ISBN varchar(20) PRIMARY KEY,
Price decimal,
Shelf int)

CREATE TABLE WeeklyChange(
ISBN varchar(20) PRIMARY KEY,
Price decimal,
Shelf int)

CREATE TABLE BookHistory(
Action nvarchar(10),
NewISBN varchar(20),
NewPrice decimal,
NewShelf int,
OldISBN varchar(20),
OldPrice decimal,
OldShelf int,
ArchivedAt datetime2)
</div>
SQL语句为 代码如下:</div> MERGE Book AS B
USING WeeklyChange AS WC
ON B.ISBN = WC.ISBN
WHEN MATCHED AND (B.Price <> WC.Price OR B.Shelf <> WC.Shelf) THEN
UPDATE SET B.Price = WC.Price, B.Shelf = WC.Shelf
WHEN NOT MATCHED THEN
INSERT VALUES(WC.ISBN, WC.Price, WC.Shelf)
OUTPUT $action, inserted.*, deleted.*, SYSDATETIME()
INTO BookHistory;
</div>
结果集为:

SELECT * FROM BookHistory
GO

Action NewISBN NewPrice NewShelf OldISBN OldPrice OldShelf ArchivedAt
------ ------- -------- -------- ------- -------- -------- ---------------------------
UPDATE A 101 1 A 100 1 2007-11-25 14:47:23.9907552
INSERT C 300 3 NULL NULL NULL 2007-11-25 14:47:23.9907552

这里有Insert和Update两种Output情况。如果只需要其中一种,可以用下面这种方法过滤: 代码如下:</div> INSERT INTO Book(ISBN, Price, Shelf, ArchivedAt)
SELECT ISBN, Price, Shelf, GETDATE() FROM
(MERGE Book AS B
USING WeeklyChange AS WC
ON B.ISBN = WC.ISBN AND B.ArchivedAt IS NULL
WHEN MATCHED AND (B.Price <> WC.Price OR B.Shelf <> WC.Shelf) THEN
UPDATE SET Price = WC.Price, Shelf = WC.Shelf
WHEN NOT MATCHED THEN
INSERT VALUES(WC.ISBN, WC.Price, WC.Shelf, NULL)
OUTPUT $action, WC.ISBN, Deleted.Price, Deleted.Shelf
) CHANGES(Action, ISBN, Price, Shelf)
WHERE Action = 'UPDATE';
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • sqlserver2008锁表语句详解(锁定数据库一个表)
  • SQLServer 2008 Merge语句的OUTPUT功能

相关文章

  • 2017-05-11SQL2005 高效分页sql语句
  • 2017-05-11Microsoft SQL Server 2008 基本安装说明
  • 2017-05-11SQL Server Management Studio Express管理器 没有导入导出数据的向导的解决方法
  • 2017-05-11快速将珊瑚虫IP数据库转MS SQL2005的图文教程第1/2页
  • 2017-05-11SQLServer2005混合模式登录配置(用户登录错误18452,233,4064)
  • 2017-05-11SQL2005 学习笔记 公用表表达式(CTE)
  • 2017-05-11sql2008安装教程 SQL Server 2008 R2 安装图解
  • 2017-05-11Sql2005注射辅助脚本[粗糙版]
  • 2017-05-11SQL Server 2005 同步复制技术
  • 2017-05-11SQLServer 2005系统配置要求官方说明

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • SqlServer 2005 T-SQL Query 学习笔记(4)
    • sql server 关于设置null的一些建议
    • SQL server 2008 数据安全(备份和恢复数据库)
    • SQL Server 连接到服务器 错误233的解决办法
    • SQL Server 移动系统数据库
    • SQLServer 2008中通过DBCC OPENTRAN和会话查询事务
    • SQLServer 数据集合的交、并、差集运算
    • java之File对象对文件的操作常用的几个方法(推荐)
    • 如何计算多个订单的核销金额
    • sqlserver多版本查看版本号

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有