Sql server 无法使用stord过程插入数据。(受影响的0行)出现一些错误

Sql server 无法使用stord过程插入数据。(受影响的0行)出现一些错误,sql-server,tsql,stored-procedures,sql-insert,Sql Server,Tsql,Stored Procedures,Sql Insert,显然,代码中有错误,但我找不到。。。无法使用存储过程插入数据。 它向我显示了此错误:(受影响的0行)存在一些错误 CREATE PROCEDURE sp_BOOKEDVEHICLES @flag bit output,-- return 0 for fail,1 for success @REGISTRATIONID varchar(30), @VEHICLEID varchar(9), @VEHICLENAME varchar(20) AS BEGIN BEGIN TRANSA

显然,代码中有错误,但我找不到。。。无法使用存储过程插入数据。
它向我显示了此错误:(受影响的0行)存在一些错误

CREATE PROCEDURE sp_BOOKEDVEHICLES
 @flag bit output,-- return 0 for fail,1 for success
 @REGISTRATIONID varchar(30),
 @VEHICLEID varchar(9),
 @VEHICLENAME varchar(20)
 AS
 BEGIN
  BEGIN TRANSACTION 
  BEGIN TRY 
 Insert into BST_TVL_BOOKED_VEHICLES_TB(REGISTRATIONID, VEHICLEID, VEHICLENAME) Values(@REGISTRATIONID,@VEHICLEID,@VEHICLENAME)
  set @flag=1;
 IF @@TRANCOUNT > 0
  BEGIN commit TRANSACTION;
  END
  END TRY 
 BEGIN CATCH
 IF @@TRANCOUNT > 0
  BEGIN rollback TRANSACTION;
  END
  set @flag=0;
  END CATCH
END
GO

Declare @flag bit
 EXEC sp_BOOKEDVEHICLES @flag output, 
 @REGISTRATIONID = '2364', 
 @VEHICLEID = '27',
 @VEHICLENAME = 'Ford'

 if @flag=1
  print 'Successfully inserted'
 else
  print 'There is some error' 

这必须引发SQL异常,因为
@flag 1
。请尝试打印错误消息()以获取实际错误的描述?

好的,您混淆了一些概念

1-当您希望多个语句提交或回滚时,使用事务

例如,从客户账户借记,从供应商贷记。要么提交,要么回滚

2-由于您不具备该条件,只需使用TRY/CATCH来包装插件

查看我的博客,了解如何处理错误

3-程序可以返回一个值。如果好为什么不零,如果坏为什么不一

我重写了你的代码如下

Insert into BST_TVL_BOOKED_VEHICLES_TB(REGISTRATIONID, VEHICLEID, VEHICLENAME) Values(@REGISTRATIONID,@VEHICLEID,@VEHICLENAME)
  set @flag=1;
 IF @@TRANCOUNT > 0
  BEGIN commit TRANSACTION;
  END

请测试代码,因为我没有定义您的表

它在我身边起作用。我没有看到任何错误删除所有代码,只保留插入。处理应用程序中的错误。在那里做这件事微不足道。使用
TransactionScope
。是否尝试重新编写的存储过程?如果您是从C#或其他程序调用,只需删除catch中的SELECT,这样您就不必处理返回记录集。什么也不会发生:(我对其他表有相同的过程,但只在这个表中给出一个错误。)此查询的结果是什么“Insert into BST_TVL_\u TB”(REGISTRATIONID,VEHICLEID,VEHICLENAME)值(@REGISTRATIONID,@VEHICLEID,@VEHICLENAME)”?它说它已成功创建。我认为问题出在声明部分。
--
--  Re-write of code
-- 

CREATE PROCEDURE sp_BOOKEDVEHICLES
   @REGISTRATIONID varchar(30),
   @VEHICLEID varchar(9),
   @VEHICLENAME varchar(20)
AS
BEGIN
  -- TRY TO ADD A RECORD
  BEGIN TRY
    INSERT INTO BST_TVL_BOOKED_VEHICLES_TB 
      (REGISTRATIONID, VEHICLEID, VEHICLENAME) 
    VALUES 
      (@REGISTRATIONID, @VEHICLEID, @VEHICLENAME);
    RETURN 0;
  END TRY 

 -- CATCH ERROR
 BEGIN CATCH
   SELECT
        ERROR_NUMBER() AS ErrorNumber
       ,ERROR_SEVERITY() AS ErrorSeverity
       ,ERROR_STATE() AS ErrorState
       ,ERROR_PROCEDURE() AS ErrorProcedure
       ,ERROR_LINE() AS ErrorLine
       ,ERROR_MESSAGE() AS ErrorMessage;
   RETURN 1;
 END CATCH
END
GO

-- Sample call
DECLARE @RETCODE INT
 EXEC @RETCODE = sp_BOOKEDVEHICLES 
   @REGISTRATIONID = '2364', 
   @VEHICLEID = '27',
   @VEHICLENAME = 'Ford';

-- Just show the result.
IF @RETCODE = 1 
  PRINT 'BAD INSERT CALL'
ELSE
  PRINT 'GOOD INSERT CALL';