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组合使用的方法:

新建下面表:

  1. CREATE TABLE Book(
  2. ISBN varchar(20) PRIMARY KEY,
  3. Price decimal,
  4. Shelf int)
  5. CREATE TABLE WeeklyChange(
  6. ISBN varchar(20) PRIMARY KEY,
  7. Price decimal,
  8. Shelf int)
  9. CREATE TABLE BookHistory(
  10. Action nvarchar(10),
  11. NewISBN varchar(20),
  12. NewPrice decimal,
  13. NewShelf int,
  14. OldISBN varchar(20),
  15. OldPrice decimal,
  16. OldShelf int,
  17. ArchivedAt datetime2)

SQL语句为

  1. MERGE Book AS B
  2. USING WeeklyChange AS WC
  3. ON B.ISBN = WC.ISBN
  4. WHEN MATCHED AND (B.Price <> WC.Price OR B.Shelf <> WC.Shelf) THEN
  5. UPDATE SET B.Price = WC.Price, B.Shelf = WC.Shelf
  6. WHEN NOT MATCHED THEN
  7. INSERT VALUES(WC.ISBN, WC.Price, WC.Shelf)
  8. OUTPUT $action, inserted.*, deleted.*, SYSDATETIME()
  9. 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情况。如果只需要其中一种,可以用下面这种方法过滤:

  1. INSERT INTO Book(ISBN, Price, Shelf, ArchivedAt)
  2. SELECT ISBN, Price, Shelf, GETDATE() FROM
  3. (MERGE Book AS B
  4. USING WeeklyChange AS WC
  5. ON B.ISBN = WC.ISBN AND B.ArchivedAt IS NULL
  6. WHEN MATCHED AND (B.Price <> WC.Price OR B.Shelf <> WC.Shelf) THEN
  7. UPDATE SET Price = WC.Price, Shelf = WC.Shelf
  8. WHEN NOT MATCHED THEN
  9. INSERT VALUES(WC.ISBN, WC.Price, WC.Shelf, NULL)
  10. OUTPUT $action, WC.ISBN, Deleted.Price, Deleted.Shelf
  11. ) CHANGES(Action, ISBN, Price, Shelf)
  12. WHERE Action = 'UPDATE';

SQL Server 2008 新增T-SQL 简写语法的更多相关文章

  1. 如何转换SQL Server 2008数据库到SQL Server 2005

        背景介绍: 公司一套系统使用的是SQL SERVER 2008数据库,突然一天收到邮件,需要将这套系统部署到各个不同地方(海外)的工厂,需要在各个工厂部署该数据库,等我将准备工作做好,整理文档 ...

  2. 安装sql server 2008 提示错误 SQL Server 2005 Express 工具。 失败

    安装sql server 2008 management,提示错误:Sql2005SsmsExpressFacet 检查是否安装了 SQL Server 2005 Express 工具. 失败,已安装 ...

  3. SQL Server 2008 r2 中 SQL语句提示“对象名无效”,但可执行

    [问题描述]在使用 SQL Server 2008 r2 时,有时在完成SQL书写后,会提示“对象名无效”,而SQL语句可正常执行. [原因]缓存相关. [解决方法]ctrl+shift+R 刷新下, ...

  4. SQL Server 2008 r2 输入SQL语句不能自动提示的解决办法

    先利用“配置工具-SQL Server 配置管理器”关闭所有MSSQLSERVER服务,利用SQL Server Installation Center,进入Maintenance,选择Repair, ...

  5. 安装Sql server 2008时出现sql server 2005 express tools failed 怎么办?

    提示错误:Sql2005SsmsExpressFacet 检查是否安装了 SQL Server 2005 Express 工具. 失败,已安装 SQL Server 2005 Express 工具.若 ...

  6. SQL Server 2008新增的审核/审计功能(Audit)

    很多时候我们都需要对数据库或者数据库服务器实例进行审核/审计 例如对失败的登录次数进行审计,某个数据库上的DDL语句进行审计,某个数据库表里面的delete语句进行审计 事实上,我们这些审计的需求基本 ...

  7. sql server 2008 在与 SQL Server 提示建立连接时出现与网络相关的或特定于实例的错误

    原文地址:http://zhidao.baidu.com/link?url=Ndav32DO9zL5XnltqoqlhvKHbJv_n3Zwihhw4cwF9ffNq8hb8z7h7n3vJVfoeW ...

  8. 【转载】SQL Server 2008 r2 中 SQL语句中单引号转义

    sql server有两个转义符. 默认情况下, 单引号'是字符串的边界符, 如果在字符串中包含单引号', 则必须使用两个单引号', 第1个单引号'就是转义符.

  9. 在SQL Server 2008 中使用SQL脚本创建登录用户并授权

    到处都使用超级用户sa显然是不安全的,因此有创建用户并让其只能访问某个数据库的必要.当然可以使用SQL Server自带的图形界面向导,但是太难用用了!有时候代码比较直接,比如这里: --使用已经创建 ...

随机推荐

  1. cocos2.2.3 HelloCpp TestCpp android 环境搭建 编译

    cygwin make PATH->E:\cygwin\bin JAVA_HOME->C:\Program Files\Java\jdk1.8.0_05 Eclipse->Windo ...

  2. 伤不起的戴尔台式机XPS8700脆弱的蓝牙

    http://en.community.dell.com/support-forums/desktop/f/3514/t/19520747.aspx 1.报价仅仅包含主机,并且不带音响(speaker ...

  3. jQuery 复制节点的元素实现加入到购物车功能

    描写叙述: 用户点击左边div中的商品,相应商品会自己主动加入到右面的div中,类似电子商城中的加入到购物车功能. 主要用到了jquery中的复制节点功能,基本原理是首先获取点击的元素,然后将对应信息 ...

  4. 单例模式 - 程序实现(Java)

    我们知道单例模式,其实就是返回一个被调用类的实例. 在频繁的进行实例(Instance)创建过程,难免过多的进行new InstanceName():我们可以只通过调用一个方法解决. 在进行设计模式的 ...

  5. ERROR: Error in Log_event::read_log_event(): 'read error', data_len: 438, event_type: 2

    分析从库1062问题,解析从库binlog日志,报错如下 [root@xxxdb0402 tmp]# mysqlbinlog mysql-bin.004271 > 4.log ERROR: Er ...

  6. Bootstrap之表格

    基本实例 为随意<table>标签加入.table类能够为其赋予主要的样式-少量的内补(padding)和水平方向的分隔线. <table class="table&quo ...

  7. flex 错误信息类型及解决方法

    总结一些经常出现的异常信息及处理方法(会一直持续更新): 异常1: 写actionscript3.0时遇到了错误.报错为:Error #2044: 未处理的 ioError:. text=Error ...

  8. iOS_ScrollView的自己主动布局

    ScrollView的自己主动布局稍显麻烦.但也是有规律可循, 下面就是仅竖向滑动的scrollView加入约束的固定做法 1.在控制器的view加入一个label.取名做anchor 2.给anch ...

  9. cf 323A A. Black-and-White Cube 立体构造

    A. Black-and-White Cube time limit per test 1 second memory limit per test 256 megabytes input stand ...

  10. mongodb之java CRUD 简单操作

    我下载的是 mongo-2.8.0.jar — Version 2.8.0 打开mongo shell -- 新建数据库test --( use test) 打开eclipse新建工程,把junit, ...