在复制到表变量而不是实际表的数据上创建游标会更好吗?

发布于 2024-11-09 19:30:43 字数 217 浏览 3 评论 0原文

我有过一些关于游标导致死锁的糟糕经历。我一直在尝试尽可能消除光标。当它们不可避免时,我会尝试最大限度地减少光标打开时完成的工作量。

将数据复制到表变量并在表变量上构建游标是否更好?

我知道答案可能取决于数据集的大小。此时,我关心的是一个非常小的数据集(一堆记录),并且很少更新。有时我仍然会在大型数据集上创建复杂的循环。

复制到表变量有什么好处,还是我让事情变得过于复杂?

I've had some bad experiences with cursors causing deadlocks. I have been trying to eliminate cursors wherever possible. When they are unavoidable, I try minimize the amount of work done while the cursor is open.

Is it ever better to copy the data to a table variable, and build a cursor over the table variable?

I know the answer will likely depend on the size of the data set. At them moment, I am concerned with a very small, data set (a handlefull of records), that is rarely updated. On occasion I will still have create complex loops over large data sets.

Is there any benefit to copying to table variables, or am I over-complicating things?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

郁金香雨 2024-11-16 19:30:43

如果您在声明游标时将其定义为STATIC,SQL Server 将自动为您创建数据的临时副本。

来自文档

静态

定义一个游标,用于制作要使用的数据的临时副本
通过光标。所有请求均发送至
光标从这里回答
tempdb 中的临时表;所以,
对基表所做的修改是
没有反映在返回的数据中
对该游标进行获取,并且这
光标不允许修改。

If you define the cursor as STATIC when you declare it, SQL Server will make a temporary copy of the data for you automatically.

From the documentation:

STATIC

Defines a cursor that makes a temporary copy of the data to be used
by the cursor. All requests to the
cursor are answered from this
temporary table in tempdb; therefore,
modifications made to base tables are
not reflected in the data returned by
fetches made to this cursor, and this
cursor does not allow modifications.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文