所以我要做的是将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
谢谢!
答案 0 :(得分:1)
首先,为什么要为此做光标?,您应该只使用
UPDATE products
SET MSRP = MSRP * 0.5
好的,现在,为了尝试回答你的问题,我不知道你为什么会收到错误,但光标中的逻辑是有缺陷的。您基本上将表格中每个MSRP
的值存储到@MSRP
变量中,然后更新整个表格,以便每一行都具有MSRP
的相同值,这将是@MSRP * 0.5
,您正在为您的表格的MSRP
的每个初始值执行相同的更新。