SQL 更新不会引发错误

Jac*_*hor 3 sql sql-server sql-update

我有这个简单的 SQL 更新

IF(@MyID IS NOT NULL)
 BEGIN
  BEGIN TRY
   UPDATE DATATABLE
    SET Param1=@Param1, Data2=@Data2,...
    WHERE MyID=@MyID
   END TRY
   BEGIN CATCH
    SELECT ERROR_MESSAGE() AS 'Message' 
    RETURN -1
   END CATCH

   SELECT * FROM DATATABLE WHERE MyID= @@IDENTITY
   SET @ResultMessage = 'Succefully Inserted' 
   SELECT @ResultMessage AS 'Message' 
   RETURN 0
 END
Run Code Online (Sandbox Code Playgroud)

问题是,当我提供一个无效的 ID(该 ID 不存在)时,不会引发错误,但我仍然会收到错误代码 0 以及成功插入消息。我还在捕获后添加了这个。还是什么都没有,我错过了一些基本的东西吗?

END CATCH
IF(@@ERROR != 0)
BEGIN
    SET @ResultMessage = 'Not Successful Inserted' 
    SELECT @ResultMessage AS 'Message' 
    RETURN -1
END
SELECT * FROM DATATABLE WHERE MyID= @@IDENTITY
SET @ResultMessage = 'Succefully Inserted' 
SELECT @ResultMessage AS 'Message' 
RETURN 0
Run Code Online (Sandbox Code Playgroud)

我应该寻找什么特别的东西吗?

Spa*_*rky 5

SQL 会捕获错误,但不更新任何行的 UPDATE 语句是有效的 SQL 语句,不应返回错误。您可以检查@@RowCount来查看更新语句实际更新了多少行

  IF(@MyID IS NOT NULL)
     BEGIN
      BEGIN TRY
       UPDATE DATATABLE
        SET Param1=@Param1, Data2=@Data2,...
        WHERE MyID=@MyID
        IF @@RowCount = 0
        BEGIN
           SELECT 'No record found...' AS Message
           RETURN -1
        END
       END TRY
       BEGIN CATCH
        SELECT ERROR_MESSAGE() AS 'Message' 
        RETURN -1
       END CATCH

       SELECT * FROM DATATABLE WHERE MyID= @@IDENTITY
       SET @ResultMessage = 'Succefully Inserted' 
       SELECT @ResultMessage AS 'Message' 
       RETURN 0
     END
Run Code Online (Sandbox Code Playgroud)