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. mysql导出和导入数据库

    出口 在dos计划,切换到mysql按照该文件夹bin下一个.输入以下命令 mysqldump -u root -p nxu_life > nxu_life2.sql 运行完毕后,就能够看到在b ...

  2. HDU 4643 GSM 简单计算几何

    今天比赛的时候略坑, admin告诉我询问Q的个数不超过n^2, 赛后敲了个 O(Q*m^3)的复杂度,但这个复杂度常数比较低,可能在除以个小常数, 300ms过了,真心无语,数据应该水了吧,比赛的时 ...

  3. 通过YAJL生成json语句

    这里主要介绍的是怎样通过yajl生成一个json语句.方法通过代码就能够非常清楚的看到了,只是这里仅仅加入了字符串. 假设须要加入其它类型的,能够查考yajl的手冊,调用其它函数进行加入. /* * ...

  4. 诺贝尔物理学奖公布:LED灯将点亮了整个21世纪

    很多其它精彩.破晓博客:点击打开链接 7日.在瑞典首都斯德哥尔摩,瑞典皇家科学院常任秘书诺尔马克(左二)宣布2014年诺贝尔物理学奖得主.新华社发 ■人物 中村修二 勇于追讨酬劳的科学家 被誉为&qu ...

  5. Windows编程之非模态对话框

    1  创建非模态对话框 <1>  HWNDCreateDialog(  HINSTANCE hInstance,  // handle to module LPCTSTRlpTemplat ...

  6. FUDCon - FedoraProject

    FUDCon - FedoraProject FUDCon: Fedora Users and Developers Conference FUD: An acronym for Fear, Unce ...

  7. 阿尔贝我给我加i觉

    http://www.huihui.cn/share/8192186       http://www.huihui.cn/share/8192178       http://www.huihui. ...

  8. MySQL的一些基本操作

    近期開始学习MySQL,主要是通过书籍,和看燕十八老师的视频,然后通过博客记录自己的学习过程. 登入数据库 zhiniaobu@telunsu-K55VD:~$ mysql -uroot -p Ent ...

  9. Android学习十九:ContentProvider初步

    一.Content Provider基本概念 1.ContentProvider为存储和获取数据提供了统一的接口.ContentProvide对数据进行封装.不用关心数据存储的细节.使用表的形式来组织 ...

  10. leetcode第一刷_Convert Sorted List to Binary Search Tree

    好,二叉搜索树粉末登场,有关他的问题有这么几个,给你一个n,如何求全部的n个节点的二叉搜索树个数?能不能把全部的这些二叉搜索树打印出来? 这道题倒不用考虑这么多,直接转即可了,我用的思想是分治,每次找 ...