Sql 插入存储过程后返回,如果成功返回1,否则返回0
我有一个存储过程。插入后,它应该返回一个值:如果插入成功,则返回1,否则返回0 例如:Sql 插入存储过程后返回,如果成功返回1,否则返回0,sql,sql-server,Sql,Sql Server,我有一个存储过程。插入后,它应该返回一个值:如果插入成功,则返回1,否则返回0 例如: ALTER PROCEDURE [dbo].[sp_save_transaction] -- Parameter @SourceCode nvarchar(255), @DepositorName nvarchar(255), @TransactionDate date AS SET XACT_ABORT ON --BEGIN TRAN DECLA
ALTER PROCEDURE [dbo].[sp_save_transaction]
-- Parameter
@SourceCode nvarchar(255),
@DepositorName nvarchar(255),
@TransactionDate date
AS
SET XACT_ABORT ON
--BEGIN TRAN
DECLARE @PaymentDate date
DECLARE @PaymentDepositorName nvarchar(255)
DECLARE @PaymentNationId int
SET @PaymentDate = @TransactionDate
SET @PaymentDepositorName = @DepositorName
SET @PaymentNationId = (SELECT [NAT_SYS_ID]
FROM [MB_TB_NATION]
WHERE [NAT_CODE] = @DepositorCountry)
INSERT INTO [dbo].[MB_TB_TRANSACTION]
([TRA_PAYMENT_DATE], [TRA_PAYMENT_DEPOSITOR_NAME], [TRA_PAYMENT_NATION_ID])
VALUES (@PaymentDate, @PaymentDepositorName, @PaymentNationId, )
谢谢你的帮助 您可以通过检查@ERROR属性来实现这一点 大致如下:
IF @@ERROR <> 0
BEGIN
RETURN 0;
END
ELSE
BEGIN
RETURN 1;
END;
但是我会把0作为你的成功价值,任何其他都是错误的。然后可以使用不同的值来表示不同的错误状态。除非您直接将结果映射到布尔成功值。有两种可能的解决方案:第一种基于输出参数,当您运行该参数时,该参数将使用所需的值进行值化。 正如您所问的,其他解决方案只返回所需的结果。 他们都会检查@错误,以了解上次操作是否成功 解决方案A:
ALTER PROCEDURE [dbo].[sp_save_transaction]
-- Parameter
@SourceCode nvarchar(255),
@DepositorName nvarchar(255),`enter code here`
@TransactionDate date,
@result int output
AS
SET XACT_ABORT ON
--BEGIN TRAN
DECLARE @PaymentDate date
DECLARE @PaymentDepositorName nvarchar(255)
DECLARE @PaymentNationId int
SET @PaymentDate = @TransactionDate
SET @PaymentDepositorName = @DepositorName
SET @PaymentNationId = (SELECT [NAT_SYS_ID] FROM [MB_TB_NATION] WHERE [NAT_CODE] = @DepositorCountry)
INSERT INTO [dbo].[MB_TB_TRANSACTION]
([TRA_PAYMENT_DATE]
,[TRA_PAYMENT_DEPOSITOR_NAME]
,[TRA_PAYMENT_NATION_ID]
)
VALUES
(
@PaymentDate,
@PaymentDepositorName,
@PaymentNationId,
)
IF @@ERROR = 0
SET @result = 1
ELSE SET @result = 0
解决方案B:
ALTER PROCEDURE [dbo].[sp_save_transaction]
-- Parameter
@SourceCode nvarchar(255),
@DepositorName nvarchar(255),`enter code here`
@TransactionDate date
AS
SET XACT_ABORT ON
--BEGIN TRAN
DECLARE @result int
DECLARE @PaymentDate date
DECLARE @PaymentDepositorName nvarchar(255)
DECLARE @PaymentNationId int
SET @PaymentDate = @TransactionDate
SET @PaymentDepositorName = @DepositorName
SET @PaymentNationId = (SELECT [NAT_SYS_ID] FROM [MB_TB_NATION] WHERE [NAT_CODE] = @DepositorCountry)
INSERT INTO [dbo].[MB_TB_TRANSACTION]
([TRA_PAYMENT_DATE]
,[TRA_PAYMENT_DEPOSITOR_NAME]
,[TRA_PAYMENT_NATION_ID]
)
VALUES
(
@PaymentDate,
@PaymentDepositorName,
@PaymentNationId,
)
IF @@ERROR = 0
SET @result = 1
ELSE SET @result = 0
RETURN @result
使用输出参数。旁注:存储过程不应使用sp_uuu前缀。微软已经这样做了,而且你确实有可能在将来的某个时候发生名称冲突。最好只是简单地避免使用sp_u,并使用其他东西作为前缀——或者根本不使用前缀!