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. Android 调用谷歌语音识别

    調用谷歌语音识别其实很简单,直接利用 intent 跳转到手机里面的谷歌搜索 代码也很简单,直接调用方法 startVoiceRecognitionActivity() 如果大家手机里面没有谷歌搜索, ...

  2. 项目实践中--Git服务器的搭建与使用指南(转)

    一.前言 Git是一款免费.开源的分布式版本控制系统,用以有效.高速的处理从很小到非常大的项目版本管理.在平时的项目开发中,我们会使用到Git来进行版本控制. Git的功能特性: 从一般开发者的角度来 ...

  3. hdu 4404 Worms(多边形与圆的交)

    求出爆炸点的坐标,就成了多边形与圆相交面积的模板题了... #include<algorithm> #include<iostream> #include<cstring ...

  4. 《Effective C++ 》学习笔记——条款02

    ****************************  一. Accustoming Yourself to C++ **************************** 条款02: Pref ...

  5. RequireJS和JQuery的模块化编程

    基于RequireJS和JQuery的模块化编程 由于js的代码逻辑越来越重,一个js文件可能会有上千行,十分不利于开发与维护.最近正在把逻辑很重的js拆分成模块,在一顿纠结是使用requirejs还 ...

  6. java中浮点数的比较(double, float)(转)

    问题的提出:如果我们编译运行下面这个程序会看到什么? public static void main(String args[]){ System.out.println(0.05+0.01); Sy ...

  7. Python – Get Object’s Class Name | Ridge Solutions, Ireland

    Python – Get Object’s Class Name | Ridge Solutions, Ireland Python – Get Object’s Class Name Author: ...

  8. 单点更新线段树 RMQ

    D. Xenia and Bit Operations time limit per test 2 seconds memory limit per test 256 megabytes input ...

  9. U14Linux的帐号与用户组

    1.在/etc/group和/etc/gshadow中查找mousegroup: grep mousegroup /etc/group /etc/gshadow (grep的使用) 2.其实Linux ...

  10. 收藏的Android很好用的组件或者框架。

    收藏的Android很好用的组件或者框架. android框架  先说两个站点: http://www.androidviews.net/ 非常好的国外开源码站,就是訪问速度有点慢啊 http://w ...