替代 sql 游标

Posted

技术标签:

【中文标题】替代 sql 游标【英文标题】:alternative to sql cursor 【发布时间】:2013-02-18 19:00:27 【问题描述】:

我目前正在使用 sql 游标来查找表以更新另一个表。我有一张包含很多短语的表格。如果这些短语中的任何一个落入更新表中的任何列,我想更新另一个表以设置 1。我正在使用 cursor 和 char 来查找短语。光标需要很长时间,我只是想知道是否可以使用其他任何东西来代替光标。谢谢。我正在使用 sql server,这是代码

declare @word varchar(max)
    declare @aCursor cursor for
SELECT col from table
    open acursor
    fetch next from acursor into @word
    while @@fetch_status=0
    begin
SET @word = '' + @word + ''
UPDATE updatetable
SET updatecol = 'y'
FROM updatetable u, tableb b
WHERE u.id = b.id AND (CHARINDEX(@word, u.name) > 0 OR CHARINDEX(@word, u.city) >
    fetch next from acursor into @word
    end
    close acursor
    deallocate acursor

【问题讨论】:

SQL 只是 结构化查询语言 - 许多数据库系统使用的语言,但不是数据库产品...很多东西是高度特定于供应商的 - 所以我们真的需要知道您使用的是什么数据库系统(以及哪个版本)...... 交叉应用也是一个选项:***.com/questions/7492797/… 【参考方案1】:

看看:http://weblogs.sqlteam.com/jeffs/archive/2008/06/05/sql-server-cursor-removal.aspx,它应该可以让您顺利上路。然而,我在这个问题上已经完全批评了,对于单独的行操作,游标是要走的路,性能与其他方法大致相同,可读性比其他方法好 10 倍,这使得代码维护变得更加容易。

但是,我没有足够的细节,似乎可以理解为什么你不能用更新语句来解决这个问题。

【讨论】:

以上是关于替代 sql 游标的主要内容,如果未能解决你的问题,请参考以下文章

在 Oracle 10g 的 SQL 过程中使用游标的任何替代方法?

PB powerbuilder中使用datastore替代游标

使用替代变量运行游标

AWS Redshift 中嵌套游标的替代方案

简单集合枚举的 MS SQL row_number/rank 替代方案

mysql 存储过程中使用游标中使用临时表可以替代数组效果