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

新建下面表:

[c-sharp] view plaincopy

  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语句为

[c-sharp] view plaincopy

  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情况。如果只需要其中一种,可以用下面这种方法过滤:

[c-sharp] view plaincopy

  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‘;
时间: 2024-10-13 13:09:55

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

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

提示错误:Sql2005SsmsExpressFacet 检查是否安装了 SQL Server 2005 Express 工具. 失败,已安装 SQL Server 2005 Express 工具.若要继续,请删除 SQL Server 2005 Express 工具. 解决方法:不用删SQL Server 2005 Express 工具.修该注册表即可,点Start,再点Run,输入regedit,点ok,找到HKEYLocalMachine/Software/Microsoft/Micros

SQL Server 2008新增的变更数据捕获和更改跟踪

本文主要介绍SQL Server中记录数据变更的四个方法:触发器.Output子句.SQL Server 2008中新增的变更数据捕获(Change Data Capture 即CDC)功能.同步更改跟踪.其中后两个为SQL Server 2008所新增. 一.触发器 在SQL Server的早期版本中,如果要记录某个表或视图的Insert/Update/Delete操作,我们可以借助触发器(Trigger)(http://msdn.microsoft.com/zh-cn/library/ms1

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

原文地址:http://zhidao.baidu.com/link?url=Ndav32DO9zL5XnltqoqlhvKHbJv_n3Zwihhw4cwF9ffNq8hb8z7h7n3vJVfoeWxzGoRh1qCzcvls-ojQddUXdq 1.开始-->所有程序-->Microsoft Visual Studio 2008 R2-->配置工具-->SQL server配置管理器 2.然后打开配置管理器,查看图中的服务是否开启了.如果没有开启,就把相应的服务开启. 3.进行

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

到处都使用超级用户sa显然是不安全的,因此有创建用户并让其只能访问某个数据库的必要.当然可以使用SQL Server自带的图形界面向导,但是太难用用了!有时候代码比较直接,比如这里: --使用已经创建好的数据库 use mydb GO --创建登录用户和密码 EXEC sp_addlogin N'mydb_user','123456' --使mydb_user成为当前数据库的合法用户 EXEC sp_grantdbaccess N'mydb_user' --授予mydb_user对自己数据库的所

学习Microsoft SQL Server 2008技术内幕:T-SQL语法基础--第4章

第4章 子查询 4.2.1 Exist 谓语: use TSQLFundamentals2008 select * from Sales.Customers as C where c.country=N'Spain' select * from Sales.Customers as C where c.country=N'Spain' and exists(select * from Sales.Orders as O where o.custid=C.custid) select * from

学习Microsoft SQL Server 2008技术内幕:T-SQL语法基础

第 2 章: 单表查询 use TSQLFundamentals2008; select * from Sales.orders; select empid, year(orderdate) as orderyear, Count(*) as numorders from Sales.Orders where custid='71' group by empid, year(orderdate) having count(*) >1 order by empid, orderyear; sele

4 - SQL Server 2008 之 使用SQL语句删除表格

使用删除表格的SQL命令与删除数据的命令一样,只是删除的是表格这个对象, 语法如下:DROP TABLE 表名 一般在删除表格之前,需判断这个表格存不存在,存在则删除,不存在则不进行执行任何代码. 代码1与代码2同样能删除表格. 另外,着重强调一点,删除表格之前,必须先删除含有外键的表格,如果直接删除外键引用的主键表格,将会报错. 代码1: USE PersonInfo GO --如果在PersonInfo数据库系统对象中找到一个名为Employee的对象,且类型为表格 IF EXISTS(SE

1 - SQL Server 2008 之 使用SQL语句创建具有约束条件的表

约束条件分为以下几种: 1)非空约束,使用NOT NULL关键字: 2)默认值约束,使用DEFAULT关键字: 3)检查约束,使用CHECK关键字: 4)唯一约束,使用UNIQUE关键字: 5)主键约束,使用PRIMARY KEY关键字: 6)外键约束,使用FOREIGN KEY关键字. 约束是确保数据的完整性,从而阻止不希望插入的数据被录入. 以下使用一段SQL代码进行演示: USE PersonInfo --使用PersonInfo数据库 GO IF EXISTS (SELECT * FRO

2 - SQL Server 2008 之 使用SQL语句为现有表添加约束条件

上一节讲的是直接在创建表的时候添加条件约束,但是有时候是在表格创建完毕之后,再添加条件约束的,那么这个又该如何实现? 其实,跟上一节所写的SQL代码,很多是相同的,只是使用了修改表的ALTER关键字及添加约束的ADD CONSTRAINT关键字而已,其他大同小异. 代码如下: USE PersonInfo --使用PersonInfo数据库 GO IF EXISTS (SELECT * FROM sys.tables WHERE [name] = 'Employee ') --如果存在Emplo