多线程执行存储过程 @@RowCount 是否会被修改 145zkl_asdfjkl]

发布时间:2017-1-19 6:12:59 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"多线程执行存储过程 @@RowCount 是否会被修改 145zkl_asdfjkl]",主要涉及到多线程执行存储过程 @@RowCount 是否会被修改 145zkl_asdfjkl]方面的内容,对于多线程执行存储过程 @@RowCount 是否会被修改 145zkl_asdfjkl]感兴趣的同学可以参考一下。

多线程正在执行同一个存储过程 begin select * from... if( @@RowCount != 1) begin ... end end 多个线程在执行这个存储过程,假设此语句 @@RowCount 值为1 , 是否有可能 select 完成后,if判断之前 , 这段时间内, 由于其他多线程也在执行 这个 或者 其他 存储过程, 修改了@@RowCount(因为@@RowCount 是全局变量),导致判断出错? 如果会出错,那应该如何做才算正确

不会出错。

if exists(select * from... ) begin end

不过建议你将 select * from .... 更改为 declare @row int select @row=count(1) from .... [email protected]@@rowcount 因为你用 select * from ....--这个会把全表扫描一遍,而你只需要一个记录数,没必要扫描全表,影响效率。

不会出错. @@RowCount 是全局变量,但它是基於session的,也就是说它永远是返回该session前一条sql所影响的行数. 多线程同时执行该存储过程,必须是多个connection到DB(或者是同一个connection排队执行),所以在任一时间点下 @@RowCount是安全的。

楼主看看这个吧。 @@ROWCOUNT 返回受上一语句影响的行数。 语法 @@ROWCOUNT 返回类型 integer 注释 任何不返回行的语句将这一变量设置为 0 ,如 IF 语句。 示例 下面的示例执行 UPDATE 语句并用 @@ROWCOUNT 来检测是否有发生更改的行。 UPDATE authors SET au_lname = 'Jones' WHERE au_id = '999-888-7777' IF @@ROWCOUNT = 0    print 'Warning: No rows were updated'

不会,详细参考:http://www.cnblogs.com/czh-liyu/archive/2007/12/22/1010202.html

不会搞错的,微软不是吃素的,肯定考虑到这个问题

不会。每个会话有自己的全局变量

select *  -- 这样不科学,直接存在性判断或取总行数吧

引用 4 楼 Garnett_KG 的回复:不会出错.  @@RowCount 是全局变量,但它是基於session的,也就是说它永远是返回该session前一条sql所影响的行数.  多线程同时执行该存储过程,必须是多个connection到DB(或者是同一个connection排队执行),所以在任一时间点下  @@RowCount是安全的。  多线程同时执行该存储过程 "多个connection到DB "  嘿嘿,你怎么知道我用的是这个啊,高手,传说中的高手。

我一直在怀疑我自己 多个connection到DB 的做法是否是合理的呢。前辈,QQ是多少啊,多多教我啊

引用 11 楼 zkl_asdfjkl 的回复:我一直在怀疑我自己 多个connection到DB 的做法是否是合理的呢。前辈,QQ是多少啊,多多教我啊 自己研究是学习的最好途径 多个connection到DB 的做法 是合理的

加了100分求 求Garnett_KG前辈的QQ

自己顶一下

上一篇:找人做个程序:定时关掉SQL 20ggh930]
下一篇:麻烦前辈们,推荐几本T—SQL的好书,最好是简单,实用。。。 10zhangdong3691314]

相关文章

相关评论