谈SQL Server 2005中的T-SQL增强


丰富的数据类型 Richer Data Types

  1、varchar(max)、nvarchar(max)和varbinary(max)数据类型最多可以保存2GB的数据,可以取代text、ntext或image数据类型。

  CREATE TABLE myTable

  (

  id INT,

  content VARCHAR(MAX)

  )

  2、XML数据类型

  XML数据类型允许用户在SQL Server数据库中保存XML片段或文档。

  错误处理 Error Handling

  1、新的异常处理结构

  2、可以捕获和处理过去会导致批处理终止的错误。前提是这些错误不会导致连接中断(通常是严重程度为21以上的错误,例如,表或数据库完整性可疑、硬件错误等等。)。

  3、TRY/CATCH 构造

  SET XACT_ABORT ON

  BEGIN TRY

  <core logic>

  END TRY

  BEGIN CATCH TRAN_ABORT

  <exception logic handling>

  END TRY

  @@error may be quired as first statement in CATCH block

  4、演示代码

  USE demo

  GO

  --创建工作表

  CREATE TABLE student

  (

  stuid INT NOT NULL PRIMARY KEY,

  stuname VARCHAR(50)

  )

  CREATE TABLE score

  (

  stuid INT NOT NULL REFERENCES student(stuid),

  score INT

  )

  GO

  INSERT INTO student VALUES (101,'zhangsan')

  INSERT INTO student VALUES (102,'wangwu')

  INSERT INTO student VALUES (103,'lishi')

  INSERT INTO student VALUES (104,'maliu')

  --调用一个运行时错误

  SET XACT_ABORT OFF

  BEGIN TRAN

  INSERT INTO score VALUES (101,90)

  INSERT INTO score VALUES (102,78)

  INSERT INTO score VALUES (107, 76) /* 外键错误 */

  INSERT INTO score VALUES (103,81)

  INSERT INTO score VALUES (104,65)

  COMMIT TRAN

  GO

  SELECT * FROM student

  SELECT * FROM score

  --使用TRY...CATCH构造,并调用一个运行时错误

  SET XACT_ABORT OFF

  BEGIN TRY

  BEGIN TRAN

  INSERT INTO score VALUES (101,90)

  INSERT INTO score VALUES (102,78)

  INSERT INTO score VALUES (107, 76) /* 外键错误 */

  INSERT INTO score VALUES (103,81)

  INSERT INTO score VALUES (104,65)

  COMMIT TRAN

  PRINT '事务提交'

  END TRY

  BEGIN CATCH

  ROLLBACK

  PRINT '事务回滚'

  SELECT ERROR_NUMBER() AS ErrorNumber,

  ERROR_SEVERITY() AS ErrorSeverity,

  ERROR_STATE() as ErrorState,

  ERROR_MESSAGE() as ErrorMessage;

  END CATCH

  GO

  SELECT * FROM score

  GO

  快照隔离 Snapshot Isolation

  1、写入程序不会阻碍读取程序

  2、新的隔离级别提供了以下优点:

  1) 提高了只读应用程序的数据可用性

  2) 允许在OLTP环境中执行非阻止读取操作

  3) 可对写入事务进行自动的强制冲突检测

  3、演示代码

  CREATE DATABASE demo2

  GO

  USE demo2

  ALTER DATABASE demo2 SET allow_snapshot_isolation ON

  CREATE TABLE test

  (

  tid INT NOT NULL primary key,

  tname VARCHAR(50) NOT NULL

  )

  INSERT INTO test VALUES(1,'version1')

  INSERT INTO test VALUES(2,'version2')

  --连接一

  USE demo2

  BEGIN TRAN

  UPDATE test SET tname='version3' WHERE tid=2

  SELECT * FROM test

  --连接二

  USE demo2

  SET transaction isolation level snapshot

  SELECT * FROM test

  TOP 增强功能

  1、TOP 增强。可以指定一个数字表达式,以返回要通过查询影响的行数或百分比,还可以根据情况使用变量或子查询。

  可以在DELETE、UPDATE和INSERT查询中使用TOP选项。

  2、更好地替换SET ROWCOUNT选项,使之更为有效。

  OUTPUT

  1、SQL Server 2005引入一个新的OUTPUT子句,以使您可以冲修改语句(INSERT、UPDATE、DELETE)中将数据返回到表变量中。

  2、新的OUTPUT子局的语法为:

  OUTPUT INTO @table_variable

  可以通过引用插入的表或删除的表来访问被修改的行的旧/新影象,其方式与访问触发器类似。在INSERT语句中,只能访问插入的表。在DELETE语句中,只能访问删除的表。在UPDATE语句中,可以访问插入的表和删除的表


« 
» 
快速导航

Copyright © 2016 phpStudy | 豫ICP备2021030365号-3