nolock实例

足球不是方的 2017-12-18 04:55:31
create table #a (
id int,
name varchar(100)
)
insert into #a
select 2,'b'

1.select * from #a

2.select * from (select id from #a ) as v (nolock)

3.select * from (select id,name from #a ) as v (nolock)

3会报错 'v' 中的列多于列列表中指定的列。

这是什么原因



...全文
252 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
唐诗三百首 2017-12-19
  • 打赏
  • 举报
回复
临时表一般无需加(nolock)

select * from (select id,name from #a ) v
吉普赛的歌 版主 2017-12-19
  • 打赏
  • 举报
回复
--with(nolock) 才是标准写法
select * from (select id from #a ) as v WITH(NOLOCK)
薛定谔的DBA 2017-12-18
  • 打赏
  • 举报
回复
(nolock) 要加在表的后面,如:
select id,name from #a (nolock)
select id,name from #a as v (nolock)
第三种情况,nolock会被当做表字段的别名,意思是表有两个字段 id 和name,但是别名只有1个 nolock(此时nolock不是关键字),还少一个字段
select * from (select id,name from #a ) as v (nolock,nolock2)
结果: nolock nolock2 2 b
zjcxc 元老 2017-12-18
  • 打赏
  • 举报
回复
建议看官网文档的语法
OwenZeng_DBA 2017-12-18
  • 打赏
  • 举报
回复
SELECT * FROM ( SELECT id , name FROM #a ( nolock ) ) AS v ; 应该这么写才是标准的

34,576

社区成员

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

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