SQL Server 2008 新增T-SQL 简写语法
1.定义变量时可以直接赋值
DECLARE @Id int = 5
2.Insert 语句可以一次插入多行数据
INSERT INTO StateList VALUES(@Id, 'WA'), (@Id + 1, 'FL'), (@Id + 2, 'NY')
3.支持+=操作符
SET StateId += 1
SQL Server 2005中的Output功能可以把Insert,Update和Delete的内容都返回,2008中的Output同样具有此功能,下面介绍一下把Output同2008的新T-SQL语句Merge组合使用的方法:
新建下面表:
- 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)
SQL语句为
- 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;
结果集为:
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情况。如果只需要其中一种,可以用下面这种方法过滤:
- 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';
SQL Server 2008 新增T-SQL 简写语法的更多相关文章
- 如何转换SQL Server 2008数据库到SQL Server 2005
背景介绍: 公司一套系统使用的是SQL SERVER 2008数据库,突然一天收到邮件,需要将这套系统部署到各个不同地方(海外)的工厂,需要在各个工厂部署该数据库,等我将准备工作做好,整理文档 ...
- 安装sql server 2008 提示错误 SQL Server 2005 Express 工具。 失败
安装sql server 2008 management,提示错误:Sql2005SsmsExpressFacet 检查是否安装了 SQL Server 2005 Express 工具. 失败,已安装 ...
- SQL Server 2008 r2 中 SQL语句提示“对象名无效”,但可执行
[问题描述]在使用 SQL Server 2008 r2 时,有时在完成SQL书写后,会提示“对象名无效”,而SQL语句可正常执行. [原因]缓存相关. [解决方法]ctrl+shift+R 刷新下, ...
- SQL Server 2008 r2 输入SQL语句不能自动提示的解决办法
先利用“配置工具-SQL Server 配置管理器”关闭所有MSSQLSERVER服务,利用SQL Server Installation Center,进入Maintenance,选择Repair, ...
- 安装Sql server 2008时出现sql server 2005 express tools failed 怎么办?
提示错误:Sql2005SsmsExpressFacet 检查是否安装了 SQL Server 2005 Express 工具. 失败,已安装 SQL Server 2005 Express 工具.若 ...
- SQL Server 2008新增的审核/审计功能(Audit)
很多时候我们都需要对数据库或者数据库服务器实例进行审核/审计 例如对失败的登录次数进行审计,某个数据库上的DDL语句进行审计,某个数据库表里面的delete语句进行审计 事实上,我们这些审计的需求基本 ...
- sql server 2008 在与 SQL Server 提示建立连接时出现与网络相关的或特定于实例的错误
原文地址:http://zhidao.baidu.com/link?url=Ndav32DO9zL5XnltqoqlhvKHbJv_n3Zwihhw4cwF9ffNq8hb8z7h7n3vJVfoeW ...
- 【转载】SQL Server 2008 r2 中 SQL语句中单引号转义
sql server有两个转义符. 默认情况下, 单引号'是字符串的边界符, 如果在字符串中包含单引号', 则必须使用两个单引号', 第1个单引号'就是转义符.
- 在SQL Server 2008 中使用SQL脚本创建登录用户并授权
到处都使用超级用户sa显然是不安全的,因此有创建用户并让其只能访问某个数据库的必要.当然可以使用SQL Server自带的图形界面向导,但是太难用用了!有时候代码比较直接,比如这里: --使用已经创建 ...
随机推荐
- hdu3605(最大流+状态压缩)
传送门:Escape 题意:给出每个人适合住的星球信息和该星球能住多少人 ,第一行给出n m 代表有 n 个人 m 个星球,然后接下来n行每行m个数字 1代表适合第 i 个星球 0 代表不适合第 i ...
- Linux中下载,压缩,解压等命令
查看是否和还有一台Linux机器相通命令:ssh 主机名@Ip地址 ,提示输入password.就可以查看远程文件的文件夹 下载远程机器上的文件:scp 主机名@Ip地址:/path/s ...
- 读取生产环境go语言的最佳实践展示
近期看了一篇关于go产品开发最佳实践的文章,go-in-procution.作者总结了他们在用go开发过程中的非常多实际经验,我们非常多事实上也用到了.鉴于此,这里就简单的写写读后感,兴许我也争取能将 ...
- ArrayBlockingQueue和LinkedBlockingQueue的区别
ArrayBlockingQueue和LinkedBlockingQueue的区别,得出结论如下: 1. 队列中锁的实现不同 ArrayBlockingQueue实现的队列中的锁是没有分离的,即生产和 ...
- Cordova CLI源码分析(二)——package.json
每个包需要在其顶层目录下包含一个package.json文件,该文件不仅是包的说明,也影响npm安装包时的配置选项 更多参数详见参考文档https://npmjs.org/doc/json.html ...
- C语言中结构体參数变量的传递
[文章摘要] 在C语言中,结构体參数变量常常作为函数的參数来进行传递.但假设參数设置不当.会出现内存问题. 本文以实际的程序代码为例.具体地介绍怎样正确地使用结构体參数变量.为相关的开发工作提供了參考 ...
- 业务系统需要什么样的ID生成器
业务系统需要什么样的ID生成器 ID 生成器在微博我们一直叫发号器,微博就是用这样的号来存储,而我微博里讨论的时候也都是以发号器为标签.它的主要目的确如平常大家理解的“为一个分布式系统的数据objec ...
- Radmin远程控制软件
Radmin远程控制软件 日期:2015-08-20 作者:lujl Radmin是一款快速的远程控制软件,可以用来远程管理公司或个人计算机来实现远程办公.你可以通过鼠标和键盘来控制远程的 ...
- android创建自定义对话框
创建如下自定义对话框: JAVA代码 LayoutInflater li = LayoutInflater.from(TagActivity. this); //NOTE final View Te ...
- Windows Phone开发(3):棋子未动,先观全局
原文:Windows Phone开发(3):棋子未动,先观全局 在进行WP开发之前,与其它开发技术一样,我们需要简单了解一个WP应用序的生命周期,我们不一定要深入了解,但至少要知道在应用程序生命周期内 ...