Returns 个更新存储过程

Returns of an Update Stored Procedure

我的 SQL SERVER 2008 上有这个存储过程:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[SAVE1]
    @IDKEY float,
    @CPF nvarchar(20)
AS
BEGIN
    SET NOCOUNT ON;
BEGIN TRY
    UPDATE people SET NINUMBER = @CPF WHERE IDKEY = (SELECT IDKEY from contact where IDKEY= @IDKEY)
    SELECT 1 as retorno
END TRY
BEGIN CATCH
    SELECT 0 as retorno
END CATCH


END

但是如果我使用无效的 IDKEY 执行,return 是“1”,但我认为会在 "CATCH" 和 return 中输入“0”。我做错了什么?

这种情况下不会抛出异常。您的子查询将 return 没有记录,因此您的更新语句将针对零条记录执行。不过它不会失败。

您的查询没有失败,而是没有返回任何行,因此它返回 1。像这样尝试:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[SAVE1]
    @IDKEY float,
    @CPF nvarchar(20)
AS

BEGIN
    SET NOCOUNT ON;

    UPDATE people SET NINUMBER = @CPF WHERE IDKEY = (SELECT IDKEY from contact where IDKEY= @IDKEY)
END

IF (@@ROWCOUNT > 0)
BEGIN
     SELECT 1 as retorno
END
ELSE 
BEGIN
    SELECT 0 as retorno
END