如何使用游标将所有字段减少50%[transact SQL]

时间:2014-04-15 15:34:13

标签: sql tsql cursor

所以我要做的是将MSRP的所有值减少50%。我编写了这个存储过程,但是减少它会通过aloot增加值,以便它达到int限制并给出我的错误。 你能帮我找到错误吗?

Create PROCEDURE MSRP_raise10 as

DECLARE @MSRP as int 
DECLARE kursor CURSOR FOR 
SELECT MSRP from products 
OPEN kursor 
FETCH NEXT FROM kursor
INTO @MSRP
WHILE @@FETCH_STATUS = 0 
BEGIN
UPDATE products SET
    MSRP = @MSRP * 0.5
FETCH NEXT FROM kursor into @MSRP
END
CLOSE kursor
DEALLOCATE kursor

谢谢!

1 个答案:

答案 0 :(得分:1)

首先,为什么要为此做光标?,您应该只使用

UPDATE products 
SET MSRP = MSRP * 0.5

好的,现在,为了尝试回答你的问题,我不知道你为什么会收到错误,但光标中的逻辑是有缺陷的。您基本上将表格中每个MSRP的值存储到@MSRP变量中,然后更新整个表格,以便每一行都具有MSRP的相同值,这将是@MSRP * 0.5,您正在为您的表格的MSRP的每个初始值执行相同的更新。