1

INSERT ステートメントを実行するストアド プロシージャがあり、データ テーブルに値を返します。データテーブルを使用する必要があります 事前に感謝します:)

私の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 に答える