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
我的 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