[英]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 = 1
在else
塊的范圍之外。 因此,一旦執行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.