我在游标导致死锁方面有过一些不好的经历。我一直在尽可能地消除游标。当它们不可避免时,我会尝试在光标打开时尽量减少完成的工作量。
将数据复制到表变量并在表变量上构建游标会更好吗?
我知道答案可能取决于数据集的大小。此刻,我关心的是一个很少更新的非常小的数据集(一堆记录)。有时我仍然会在大型数据集上创建复杂的循环。
复制到表变量有什么好处,还是我把事情复杂化了?
我在游标导致死锁方面有过一些不好的经历。我一直在尽可能地消除游标。当它们不可避免时,我会尝试在光标打开时尽量减少完成的工作量。
将数据复制到表变量并在表变量上构建游标会更好吗?
我知道答案可能取决于数据集的大小。此刻,我关心的是一个很少更新的非常小的数据集(一堆记录)。有时我仍然会在大型数据集上创建复杂的循环。
复制到表变量有什么好处,还是我把事情复杂化了?
如果您在声明时定义游标STATIC
,SQL Server 将自动为您制作数据的临时副本。
从文档:
静止的
定义一个游标,该游标制作数据的临时副本以供游标使用。对游标的所有请求都是从 tempdb 中的这个临时表中回答的;因此,对基表所做的修改不会反映在对该游标进行的提取返回的数据中,并且该游标不允许修改。