首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >继续获取“cursor is READ-ONLY”

继续获取“cursor is READ-ONLY”
EN

Stack Overflow用户
提问于 2012-01-11 23:43:21
回答 1查看 1.5K关注 0票数 4

我的代码看起来很前卫。

我想用唯一的计数器更新一个特定的字段,不等于{1,2,3,...}。

我一直收到错误“游标是只读的”。

还有:有没有更简单的方法?

代码语言:javascript
复制
declare @MaxVal int = NULL
declare @fetchVal int = NULL
select @MaxVal = MAX(tp_Id)+1 from [<tableContainingInitialMaxval>] 
/** some default **/

DECLARE curs01 CURSOR 
for select @maxVal + row_number() OVER (order by [<someUniqueField>]) from [<table2update>];
(used FOR UPDATE OF [<field2update>] but that made no difference)

open curs01
FETCH NEXT FROM curs01 INTO @fetchVal;
WHILE @@FETCH_STATUS = 0
    begin
        update [<table2update>] set [<field2update>] =  @fetchVal 
        WHERE CURRENT OF curs01;
        FETCH NEXT FROM curs01 INTO @fetchVal;
    end;
CLOSE curs01;
DEALLOCATE curs01;
GO 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-11 23:47:03

你不需要一个游标来做这个。

代码语言:javascript
复制
DECLARE @MaxVal INT = NULL

SELECT @MaxVal = MAX(tp_Id) + 1
FROM   tableContainingInitialMaxval;

WITH CTE
     AS (SELECT *,
                @maxVal + row_number() OVER (ORDER BY someUniqueField) AS rn
         FROM   table2update)
UPDATE CTE
SET    field2update = rn  
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8822145

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档