WHILE 循环在 SQL Server 中的存储过程中不起作用

WHILE loop not working in a stored procedure in SQL Server

提问人:Nauman Khan 提问时间:7/6/2023 最后编辑:marc_sNauman Khan 更新时间:7/6/2023 访问量:44

问:

我在脚本中有多个代码块,每个代码块都根据输入参数执行。

我创建了以下存储过程:

CREATE PROCEDURE [usp_Auto_Extraction_Parameterized] 
    @data nvarchar(30)
AS
BEGIN
    WHILE (@data = '1')
    BEGIN
        SELECT * FROM abc
    END;

    WHILE (@data = '2')
    BEGIN
        SELECT * FROM xyz
    END;
    
    WHILE (@data = '3')
    BEGIN
        SELECT * FROM def
    END 
END

执行存储过程后的预期结果如下:

EXEC [usp_Auto_Extraction_Parameterized] @data = '3'

是只应该执行最后一个代码块,但这里三个块都被执行了。

我做错了什么?请帮忙!

sql-server while-循环

评论

2赞 Stu 7/6/2023
您尝试在无限循环中无限期运行选择查询的原因是什么?
1赞 Thom A 7/6/2023
因为价值永不改变;一旦你进入循环,你就永远无法逃脱。你真的想要吗?也许你想要 ?@dataWHILEIF
2赞 Stu 7/6/2023
想必您可以阅读这两个关键字的文档并可能回答这个难题? 是一个 control-of-flow 语句,是一个循环构造。ifwhile
1赞 Thom A 7/6/2023
也许,取决于你的实际目标是什么,但你声称它正在做什么和代码将做什么是不一样的。
1赞 Dan Guzman 7/6/2023
@NaumanKhan,是的,你想要根据你的描述。 将在 BEGIN/END 之间重复代码,直到条件为 false。IFWHILE

答:

3赞 Jakob_NS 7/6/2023 #1

您可以尝试使用 IF 语句而不是 WHILE。这应该可以解决您的问题:

CREATE PROCEDURE [usp_Auto_Extraction_Parameterized] @data nvarchar(30)
AS
BEGIN
  IF (@data = '1')
  BEGIN
      SELECT * FROM abc
  END
  ELSE IF (@data = '2')
  BEGIN
      SELECT * FROM xyz
  END
  ELSE IF (@data = '3')
  BEGIN
      SELECT * FROM def
  END
END