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)
我应该寻找什么特别的东西吗?
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)