打印本文 打印本文 关闭窗口 关闭窗口
使用 SQL Server 时需要经常用到的几个设置选项!
作者:武汉SEO闵涛  文章来源:敏韬网  点击数2449  更新时间:2007/11/14 12:56:42  文章录入:mintao  责任编辑:mintao
ECT count(*) AS Cnt
   FROM titles
   WHERE advance >= 5000
   GO

   下面是结果集:

   Cnt      
   -----------
   11         

   (1 row(s) affected)

   现在,将 ROWCOUNT 设置为 4,并更新预付款等于或大于 $5,000 的所有行。

   -- SET ROWCOUNT to 4.
   SET ROWCOUNT 4
   GO
   UPDATE titles
   SET advance = 5000
   WHERE advance >= 5000
   GO

 

9. SET TRANSACTION ISOLATION LEVEL
说明:控制由连接发出的所有 Microsoft® SQL Server™ SELECT 语句的默认事务锁定行为。

语法:SET TRANSACTION ISOLATION LEVEL
   { READ COMMITTED
       | READ UNCOMMITTED
       | REPEATABLE READ
       | SERIALIZABLE
   }

参数:READ COMMITTED 指定在读取数据时控制共享锁以避免脏读,但数据可在事务结束前更改,从而产生不可重复读取或幻像数据。该选项是 SQL Server 的默认值。
   READ UNCOMMITTED 执行脏读或 0 级隔离锁定,这表示不发出共享锁,也不接受排它锁。当设置该选项时,可以对数据执行未提交读或脏读;在事务结束前可以更改数据内的数值,行也可以出现在数据集中或从数据集消失。该选项的作用与在事务内所有语句中的所有表上设置 NOLOCK 相同。这是四个隔离级别中限制最小的级别。
   REPEATABLE READ 锁定查询中使用的所有数据以防止其他用户更新数据,但是其他用户可以将新的幻像行插入数据集,且幻像行包括在当前事务的后续读取中。因为并发低于默认隔离级别,所以应只在必要时才使用该选项。
   SERIALIZABLE 在数据集上放置一个范围锁,以防止其他用户在事务完成之前更新数据集或将行插入数据集内。这是四个隔离级别中限制最大的级别。因为并发级别较低,所以应只在必要时才使用该选项。该选项的作用与在事务内所有 SELECT 语句中的所有表上设置 HOLDLOCK 相同。

注释:一次只能设置这些选项中的一个,而且设置的选项将一直对那个连接保持有效,直到显式更改该选项为止。这是默认行为,除非在语句的 FROM 子句中在表级上指定优化选项。
   SET TRANSACTION ISOLATION LEVEL 的设置是在执行或运行时设置,而不是在分析时设置。

示例:下例为会话设置 TRANSACTION ISOLATION LEVEL。对于每个后续 Transact-SQL 语句,SQL Server 将所有共享锁一直控制到事务结束为止。

   SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
   GO
   BEGIN TRANSACTION
   SELECT * FROM publishers
   SELECT * FROM authors
   ...
   COMMIT TRANSACTION

 

10. SET XACT_ABORT

说明:指定当 Transact-SQL 语句产生运行时错误时,Microsoft® SQL Server™ 是否自动回滚当前事务。

语法:SET XACT_ABORT { ON | OFF }

注释:当 SET XACT_ABORT 为 ON 时,如果 Transact-SQL 语句产生运行时错误,整个事务将终止并回滚。为 OFF 时,只回滚产生错误的 Transact-SQL 语句,而事务将继续进行处理。编译错误(如语法错误)不受 SET XACT_ABORT 的影响。
   对于大多数 OLE DB 提供程序(包括 SQL Server),隐性或显式事务中的数据修改语句必须将 XACT_ABORT 设置为 ON。唯一不需要该选项的情况是提供程序支持嵌套事务时。有关更多信息,请参见分布式查询和分布式事务。
   SET XACT_ABORT 的设置是在执行或运行时设置,而不是在分析时设置。

示例:下例导致在含有其它 Transact-SQL 语句的事务中发生违反外键错误。在第一个语句集中产生错误,但其它语句均成功执行且事务成功提交。在第二个语句集中,SET XACT_ABORT 设置为 ON。这导致语句错误使批处理终止,并使事务回滚。

   CREATE TABLE t1 (a int PRIMARY KEY)
   CREATE TABLE t2 (a int REFERENCES t1(a))
   GO
   INSERT INTO t1 VALUES (1)
   INSERT INTO t1 VALUES (3)
   INSERT INTO t1 VALUES (4)
   INSERT INTO t1 VALUES (6)
   GO
   SET XACT_ABORT OFF
   GO
   BEGIN TRAN
   INSERT INTO t2 VALUES (1)
   INSERT INTO t2 VALUES (2) /* Foreign key error */
   INSERT INTO t2 VALUES (3)
   COMMIT TRAN
   GO

   SET XACT_ABORT ON
   GO

   BEGIN TRAN
   INSERT INTO t2 VALUES (4)
   INSERT INTO t2 VALUES (5) /* Foreign key error */
   INSERT INTO t2 VALUES (6)
   COMMIT TRAN
   GO

   /* Select shows only keys 1 and 3 added.
      Key 2 insert failed and was rolled back, but
      XACT_ABORT was OFF and rest of transaction
      succeeded.
      Key 5 insert error with XACT_ABORT ON caused
      all of the second transaction to roll back. */

   SELECT *
   FROM t2
   GO

   DROP TABLE t2
   DROP TABLE t1
   GO

上一页  [1] [2] 

打印本文 打印本文 关闭窗口 关闭窗口