我有以下无法使用的存储过程,每次运行时,它都处于无限循环中。 SP的目标是遍历每一行的产品表以评估结果,如果计算行数时的结果大于0,则必须在表中插入代码,如果结果为0,则记录必须根据第三个查询被插入。
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT @QUERY = count (*) from (
SELECT TOP 1 [ID],[code],[FEC_MAX],[FUENTE]FROM PRODUCTO
WHERE ( FUENTE = 1 OR FUENTE =2 OR FUENTE = 3 ) and code = @CODE
order by FEC_MAX DESC
) a
IF @QUERY > 0
BEGIN
INSERT INTO TEST
SELECT @code,@fecha,@NOMBRE, @FUENTE , @ID ;
END
if @QUERY < 0
INSERT INTO TEST
SELECT top 1 @code,@fecha,@NOMBRE, @FUENTE , @ID
FROM TEST
WHERE code = @code
order by FUENTE ASC
END
THNKS
答案 0 :(得分:0)
我认为您可能会在循环中缺少FETCH NEXT FROM。
从@@ FETCHSTATUS返回值
光标停留在第一行,@@ FETCHSTATUS将始终返回成功。假设您已正确声明光标,则在循环内添加FETCH NEXT FROM,如下所示。它看起来应该像这样:
DECLARE YourCursorName CURSOR FOR
SELECT col
FROM PRODUCTO
OPEN YourCursorName;
FETCH NEXT FROM YourCursorName;
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT @QUERY = count (*) from (
SELECT TOP 1 [ID],[code],[FEC_MAX],[FUENTE]FROM PRODUCTO
WHERE ( FUENTE = 1 OR FUENTE =2 OR FUENTE = 3 ) and code = @CODE
order by FEC_MAX DESC
) a
IF @QUERY > 0
BEGIN
INSERT INTO TEST
SELECT @code,@fecha,@NOMBRE, @FUENTE , @ID ;
END
if @QUERY < 0
INSERT INTO TEST
SELECT top 1 @code,@fecha,@NOMBRE, @FUENTE , @ID
FROM TEST
WHERE code = @code
order by FUENTE ASC
FETCH NEXT FROM YourCursorName
END
CLOSE YourCursorName;
DEALLOCATE YourCursorName;