Sql 返回一个更新存储过程
我的SQL SERVER 2008上有以下存储过程:Sql 返回一个更新存储过程,sql,sql-server,stored-procedures,Sql,Sql Server,Stored Procedures,我的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
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执行,则返回值为1,但我认为会输入CATCH并返回0。我做错了什么?在这种情况下不会抛出异常。您的子查询将不返回任何记录,因此update语句将针对零记录执行。但是它不会失败。您的查询没有失败,而是没有返回行,因此返回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
注意:只有当发生错误或异常时,catch块中的代码才会运行,为什么您不只是执行UPDATE people SET NINUMBER=@CPF WHERE IDKEY=@IDKEY?我的错误是,示例中的代码应该不同。更新人员设置NINUMBER=@CPF,其中IDKEY=从联系人中选择IDKEY,其中CDKEY=@CDKEYYou将浮点用作主键???是的,我将浮点用作主键。怎么了?很有魅力。我会把它用于其他程序。非常感谢。