当前位置:数据库 > SQLServer >>

sqlserver使用 cte 时会将涉及表都锁住吗?求高手解答,本人不懂其中原理望详解

追问:这个共享锁可以避免吗?这样的查询结束之后,被锁的资源能够及时释放吗?我看有的高手提到了nolock,这个有必要加吗?要加在那里呢? 求大神指点
答案:with LayerTree
as
(
  select id,LayerID,ParentLayerID from tbl_layer(nolock) where layerid='0101'
  union all
  select l.id,l.LayerID,l.ParentLayerID from tbl_layer l(nolock) join layertree lt(nolock)
  on l.ParentLayerID = lt.LayerID
)
select * from LayerTree
select 只会添加共享锁,会阻塞其他insert跟update操作,不会阻塞select操作
其他:a CTE 与派生表类似,具体表现在不存储为对象,并且只在查询期间有效。定义 CTE 后,可以在 SELECT、INSERT、UPDATE 或 DELETE 语句中对其进行引用,就像引用表或视图一样。在视图中时无法修改的 也许就是你说的锁住 希望对你的问题有帮助

上一个:麻烦高手帮忙把一个sqlserver的触发器改成oracle的,谢谢了。。。sql脚本如下:
下一个:sqlserver存储过程语法错误的问题

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,