1

我有一个运行插入语句的存储过程,它将一个值返回到数据表中。我必须使用数据表提前谢谢你:)

我的 SQL 存储过程

begin
Declare @postID int = 0
insert into reviews (customerID, title, review)
values (@cusomerID, @title, @review) 
set @postID = SCOPE_IDENTITY()
end

返回值存储在数据表中,我想检查插入是否成功。

我正在使用 ajax jquery 进行插入,它调用存储过程并返回一个值

方法调用

if (data.Rows[0]["post_ID "] != 0)
            {
                return "successful";
            }
else{
return "failed";
}

在javascript中

if(result != "failed"){
run code
}

但是,即使插入失败,它也会成功返回。

任何帮助都会非常感谢。

4

1 回答 1

1

SCOPE_IDENTITY() 返回最后一个自动 ID。在您的情况下,它会返回插入失败之前的那个。

尝试类似的东西

BEGIN
    DECARE @postID int = 0
    INSERT INTO reviews (customerID, title, review) VALUES (@cusomerID, @title, @review) 
    IF @@ERROR <> 0
         SET @postID = -1
    ELSE
        SET @postID = (select SCOPE_IDENTITY())
   SELECT @postID
END

在你的代码中,如果 ID == -1 你知道它失败了。

或者,您可以

BEGIN
    SET XACT_ABORT ON
    DECARE @postID int = 0
    INSERT INTO reviews (customerID, title, review) VALUES (@cusomerID, @title, @review) 
    SET @postID = (select SCOPE_IDENTITY())        
    SELECT @postID
END

任何错误都会在您的代码中发生异常(事务也会回滚)。

于 2013-02-24T01:46:20.843 回答