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';