Author: Mars
MSN :
SQL SERVER ROWCOUNT
近期使用了一个删除脚本,由于表太大,一次删除可能需要等很久,就采用了多次分段删除
这里有使用@@ROWCOUNT 但这个值是很容易变化的 下面把我用到的一些变化记下
先列出文档中给出的
执行简单分配的语句始终将 @@ROWCOUNT 值设置为 1
SET,RETURN,READTEXT,及不带查询的SELECT语句, SELECT GETDATE()或SELECT 'Generic Text'
数据操作语言 (DML) 语句将 @@ROWCOUNT 值设置为受查询影响的行数
DECLARE CURSOR 和 FETCH 将 @@ROWCOUNT 值设置为 1
EXECUTE 语句保留前一个 @@ROWCOUNT
USE、SET
依据上面的说明,如果想保留@@ROWCOUNT的值,则不能随意使用@@ROWCOUNT
下面是一个错误的例子
UPDATE TBL ......
IF @@ROWCOUNT > 0 BEGIN SET @TmpCount = @TmpCount + @@ROWCOUNT ...... END
|
上面的那个赋值操作将是没有意义的
IF @@ROWCOUNT > 0 --执行后@@ROWCOUNT为0
因此下面的赋值语句中的变量的值将是不会变化的.可以再用一个变量提前把@@ROWCOUNT的值保存下来,然后再用这个保留下来的值再去做其它处理
SET @CurCode = @@ROWCOUNT --执行后@@ROWCOUNT为1
然后再用这个@CurCode去做其它判断与处理.
另外删除前面的多少行,一般先想到的就是先给一个子查询,给出TOP多少个ID值出来,然后做INNER JOIN或是IN,还有一个参数可以达到同样的效果
SET ROWCOUNT 1000
设置后,在此语句后面执行的任何操作,当影响的记录数达到1000行的时候,将停止执行,直到关闭ROWCOUNT的设置. 这样可以节省掉子查询的开销
SET ROWCOUNT 0 -- 关闭ROWCOUNT设置.
阅读(1555) | 评论(0) | 转发(0) |