Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server中的Update语句和游标_Sql Server - Fatal编程技术网

Sql server SQL Server中的Update语句和游标

Sql server SQL Server中的Update语句和游标,sql-server,Sql Server,我对下面的更新声明有点困惑。例如,如果@num=1和ntt=4。在使用光标时,我想使用num的初始值,即1。但我收到的是递增的值5。我做错了什么?任何帮助,谢谢,我很感激 UPDATE #temp SET num = @num, @num = @num + ntt DECLARE cur CURSOR LOCAL FORWARD_ONLY DYNAMIC FOR SELECT yr, id, num FROM #temp OPEN cur FETCH cur INTO @

我对下面的更新声明有点困惑。例如,如果@num=1和ntt=4。在使用光标时,我想使用num的初始值,即1。但我收到的是递增的值5。我做错了什么?任何帮助,谢谢,我很感激

UPDATE #temp
SET num = @num, 
    @num = @num + ntt

DECLARE cur CURSOR LOCAL FORWARD_ONLY DYNAMIC FOR 
    SELECT yr, id, num FROM #temp

OPEN cur
FETCH cur INTO @yr, @id, @num 

WHILE @@FETCH_STATUS = 0
     BEGIN
     UPDATE #TEMP2
     SET TRAN_ID = @num,
         @num = @num +1
     WHERE ...........

     FETCH cur INTO @yr, @id, @num
END
更新会执行两件您在集合中确定的事情

将temp中的num列更新为@num 将@num更新为@num+ntt
您设置了@num=@num+ntt,那么为什么您会被@num=1+4=5弄糊涂呢?实际上,我正在将几个存储过程从Sybase迁移到SQL server。上述代码在sql server中无法正常工作。在sybase执行中,代码正在使用@num=1更新Temp2表中的Tran列,这是必需的。但在SQLServer中,它正在更新为5。我不知道如何使其工作类似于sybase。感谢您的回复。是的,很抱歉输入错误,我想从temp中选择。确切地说,我正在将列num更新为1,并将@num增加为5。但在cursor中,我想检索num列值,即1,并在temp2表中为columntran更新它。但是我收到的值是5,这是递增的值。任何提示都是非常感谢的。我想在我们找到解决方案之前还有一些其他的事情。1如果TEMP2中有一列名为TRAN,请将其更改为[TRAN],因为它是事务的保留关键字缩写。2在循环中设置@num=@num+1是没有意义的,因为您获取@num的值是游标的一部分。我使用tran只是一个例子。在while循环中,我们不获取任何记录并在temp2的tran_id列中更新它。稍后我们将从temp2插入记录表中。我认为您试图对@num做的太多了,可能需要引入另一个变量来解决问题并避免太多的混淆。循环中@num=@num+1的意义是什么?