簡體   English   中英

SQL存儲過程IF ELSE邏輯錯誤

[英]SQL Stored Procedure IF ELSE logic error

我正在嘗試實現插入存儲過程。 基本上, stored procedure將如何工作,將檢查記錄是否存在,然后繼續執行插入操作。 變量@status將用作指標。 但是,我發現此query一個特殊問題是,當我執行query ,無論數據是否存在,它將返回結果@status = 1 但是, INSERT函數很好,沒有任何問題,只是@status 以下是我的實現:

CREATE PROCEDURE save_proc
(
  @userid varchar(10)
  @name varchar(30)
)

AS

DECLARE @status int

  if exists ( SELECT * FROM table1 where userID = @userid AND userName = @name)
    SET @status = 0

  else
    INSERT INTO table1 (userID, userName) VALUES (@userid, @name)
    SET @status = 1

SELECT @status
else
begin
    INSERT INTO table1 (userID, userName) VALUES (@userid, @name)
    SET @status = 1
end

修改上面的代碼。 您尚未定義其他范圍。 這僅取決於插入語句。 每次執行SET @status = 1

嘗試將其放在BEGIN END

CREATE PROCEDURE save_proc
(
  @userid varchar(10)
  @name varchar(30)
)

AS

DECLARE @status int

  if exists ( SELECT * FROM table1 where userID = @userid AND userName = @name)
    SET @status = 0

    else
    begin
        INSERT INTO table1 (userID, userName) VALUES (@userid, @name)
        SET @status = 1
    end

如果您未將BEGIN END INSERT INTO table1 (userID, userName) VALUES (@userid, @name)則else語句的作用域僅是要執行的下一行,即INSERT INTO table1 (userID, userName) VALUES (@userid, @name)僅在else塊的作用域內。 SET @status = 1else塊的范圍之外。 因此,一旦執行else塊,將執行下一個查詢,即SET @status = 1

附帶說明:

當您檢查if exists請不要使用*通配符。 相反,您可以使用1

if exists ( SELECT 1 FROM table1 where userID = @userid AND userName = @name)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM