存储过程常用的关键词

1、SET XACT_ABORT ON时,在事务中,若出现错误,系统即默认回滚事务,但只对非自定义错误有效

2、SET XACT_ABORT OFF,默认值,在事务中,回滚一个语句还是整个事务视错误的严重程序而定,用户级错误一般不会回滚整个事务

3、存储过程:SET Transaction Isolation Level Read语法的四种情况

SET Transaction Isolation Level Read UNCOMMITTED

使用这句东东呢可以分为四种情况,现在就在这里逐一介绍:

第一种情况:

READ   COMMITTED

这句的作用是:

指定在读取数据时控制共享锁以避免脏读,但数据可在事务结束前更改,从而产生不可重复读取或幻像数据。该选项是   SQL   Server   的默认值。

第二种情况:

 READ   UNCOMMITTED

这句的作用是:

执行脏读或0级隔离锁定,这表示不发出共享锁,也不接受排它锁。当设置该选项时,可以对数据执行未提交读或脏读;在事务结束前可以更改数据内的数值,行也可以出现在数据集中或从数据集消失。该选项的作用与在事务内所有语句中的所有表上设置 NOLOCK 相同。这是四个隔离级别中限制最小的级别。

第三种情况:

REPEATABLE   READ

这句的作用是:

锁定查询中使用的所有数据以防止其他用户更新数据,但是其他用户可以将新的幻像行插入数据集,且幻像行包括在当前事务的后续读取中。因为并发低于默认隔离级别,所以应只在必要时才使用该选项。

第四种情况:

SERIALIZABLE

这句的作用是:

 在数据集上放置一个范围锁,以防止其他用户在事务完成之前更新数据集或将行插入数据集内。这是四个隔离级别中限制最大的级别。因为并发级别较低,所以应只在必要时才使用该选项。该选项的作用与在事务内所有   SELECT   语句中的所有表上设置   HOLDLOCK   相同。

 4、Exec sp_executesql @sqlPopulate 执行SQL语句

5、IF NOT EXISTS(SELECT ProductName FROM Hishop_Products WHERE ProductId = @ProductId) 是否存在某值得用法(in,not in ,exists,not esists 的区别)

6、INSERT INTO #PageIndexForSearch (ProductId) EXEC sp_executesql @SqlPopulate 将某SQL语句的执行结果,添加到临时表

7、大家在写查询时,为了性能,往往会在表后面加一个nolock,或者是with(nolock),其目的就是查询时不锁定表,从而达到提高查询速度的目的。

 

8、可以用select 或set 来为存储过程变量设置初始值;

9、存储过程变量是否为空的判断为( IF @Stock IS NULL);

10、 Lower(@stock)  转为小写;

11,SET @ParmDefinition = N'@SearchText nvarchar(256)' 前面的“N” 用于解决统一编码问题;

12、CAST(@TopCount AS VARCHAR(10)) 类型转换;

13、 SELECT @CurrentUserAccountStatus = UserAccountStatus  FROM Hishop_Users WHERE UserId = @UserId

posted @ 2012-03-11 20:03  kevin655  阅读(4870)  评论(0编辑  收藏  举报