看到一个存储过程这样,发问。[with(nolock)]

madmanahong 2012-02-08 10:32:24
BEGIN
SET NOCOUNT ON

SET @aMoney_out = 0 --初始化输出参数

SELECT @aMoney_out =[money] FROM t_user_money WITH(nolock) WHERE user_id = @aUser_id
END



问题

SET NOCOUNT ON 和 WITH(lock)
在这里有意义吗?

sql server 默认 select 不允许脏读?


另外本人以前是做mysql 的,谁能推荐一本SQL Server 2008的权威级书籍??
电子版和纸板都行

...全文
312 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
gold_water 2012-02-08
  • 打赏
  • 举报
回复
默认WITH(lock) 不可以脏读。
叶子 2012-02-08
  • 打赏
  • 举报
回复
WITH(NOLOCK) 允许脏读
紫竹林畔 2012-02-08
  • 打赏
  • 举报
回复
SQL server默认是的已提交读 即不允许脏读
当 SET NOCOUNT 为 ON 时,不返回计数 默认返回
南冰 2012-02-08
  • 打赏
  • 举报
回复

当 SET NOCOUNT 为 ON 时,不返回计数(表示受 Transact-SQL 语句影响的行数)。当 SET NOCOUNT 为 OFF 时,返回计数。

如果存储过程中包含的一些语句并不返回许多实际的数据,则该设置由于大量减少了网络流量,因此可显著提高性能。
WITH(NOLOCK) 是查询时不锁表 允许脏读

这两个是不冲突的 没任何关系
勿勿 2012-02-08
  • 打赏
  • 举报
回复
SET NOCOUNT ON 和 WITH(lock)
在这里有意义吗?

是默认的
--小F-- 2012-02-08
  • 打赏
  • 举报
回复
默认是 WITH(lock)

书籍SQL SERVER的技术内幕系列不错。
madmanahong 2012-02-08
  • 打赏
  • 举报
回复
这个我清楚,我的意思是这里不加也行吧?

总得有个默认吧。
老猫五号 2012-02-08
  • 打赏
  • 举报
回复
WITH(nolock)允许读脏,WITH(lock)
不允许读脏
唐诗三百首 2012-02-08
  • 打赏
  • 举报
回复
SET NOCOUNT ON 和 WITH(lock)
在这里有意义吗?
--> SET NOCOUNT ON, 不返回计数(表示受 Transact-SQL 语句影响的行数).
WITH(lock), 不脏读.

sql server 默认 select 不允许脏读?
--> 是的.

另外本人以前是做mysql 的,谁能推荐一本SQL Server 2008的权威级书籍??
电子版和纸板都行
--> 推荐胡百敬写的.
Felixzhaowenzhong 2012-02-08
  • 打赏
  • 举报
回复
当 SET NOCOUNT 为 ON 时,不返回计数(表示受 Transact-SQL 语句影响的行数)。当 SET NOCOUNT 为 OFF 时,返回计数。好处 就是减少I/O输出
with(nolock) 查询时不发请求共享锁,允许脏读
大力水手 2012-02-08
  • 打赏
  • 举报
回复
SET NOCOUNT ON --不显示受影响的行数
WITH(lock) --默认的,不允许脏读
with(nolock) -- 允许脏读

begin tran
update tb set c1=1 where id=1
waitfor delay '01:00:00' --延迟一个小时后提交
commit tran

新打开一个查询窗口
select * from tb where id=1 --默认是with(lock)
select * from tb with(nolock) where id=1 --读到了未修改之前的数据, 也叫脏数据

希望对你有帮助

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧