在存储过程中,怎么样截获代号547的 外键约束错误? if (object.ErrorCode=='5809')print 'erorr' 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 IF @@ERROR = 547 print "错误547" 就是表A的主键存在和表B的外键约束,当删除这个表A的某一条记录时,如果表B存在匹配数据会因为这个约束而弹出547错误。就是说如果在store procedure里面进行这样的操作,如何在过程内部捕获这个错误,把这个错误代号,作为一个output参数返回?不要在具体的客户端程序中去进行这个错误捕捉!IF @@ERROR = 547 print "错误547"这个是不行的,系统会先抛出这个错误! 下面的语句不知道对你有不有帮助.-------------------------------------------------------------------------------程序一开始就加了一个判断.如果在存取过程之内@intTransactionCountOnEntry数目--没有异样,那么就没有理由要求在该过程之内进行提交或回滚.-----------------------------------------------------------------------------ALTER Procedure sP ( ...... )Asset nocount on --使返回的结果中不包含有关受 Transact-SQL 语句影响的行数的信息Declare @intErrorCode int, @intTransactionCountOnEntry int --在存取过程的入口处记录已打开事务的数目.Select @intErrorCode = @@Error-----------------------------------------------------------------------------If @intErrorCode = 0 Begin Select @intTransactionCountOnEntry = @@TranCount --返回当前连接的活动事务数 BEGIN TRANSACTION --将 @@TRANCOUNT 加 1End-----------------------------------------------------------------------------If @intErrorCode = 0begin 您的语句...... Select @intErrorCode = @@ErrorendIf @intErrorCode = 0begin 您的语句...... Select @intErrorCode = @@Errorend-----------------------------------------------------------------------------If @@TranCount > @intTransactionCountOnEntry --出现异样,要么提交,要么回滚Begin If @intErrorCode = 0 COMMIT TRANSACTION Else ROLLBACK TRANSACTION End-----------------------------------------------------------------------------return @intErrorCode 1.外部约束还可以设置为 : set null 或 set default 你看具体情况来设.不一定要设置为 cascade2.还有 initially deferred 也可事务结束后检查啊 2005都用上了啊,你是用.net 2005速成版里带的sqlserver2005 CTP? 事务嵌套问题,回滚外层事务 下面的sql语句报错,请大家帮帮忙,谢谢了 问sql问题 不知道这个问题该不该再发一次 还是触发器的问题 SQL2000 最近频繁出现"一般性网络错误 请检查网络文档" [求助]一个关于成绩表检索的问题 win_xp Professional 安装 SQL200 问题。 关于ASCII()函数 我想写个触发器,就是同步复制表 真的很想将SA用户删除,该如何操作 問一SQL語句? 这样的update触发器怎么写?
print "错误547"
就是说如果在store procedure里面进行这样的操作,如何在过程内部捕获这个错误,把这个错误代号,作为一个output参数返回?
不要在具体的客户端程序中去进行这个错误捕捉!
IF @@ERROR = 547
print "错误547"
这个是不行的,系统会先抛出这个错误!
--程序一开始就加了一个判断.如果在存取过程之内@intTransactionCountOnEntry数目
--没有异样,那么就没有理由要求在该过程之内进行提交或回滚.
-----------------------------------------------------------------------------
ALTER Procedure sP
(
......
)
As
set nocount on --使返回的结果中不包含有关受 Transact-SQL 语句影响的行数的信息Declare @intErrorCode int,
@intTransactionCountOnEntry int --在存取过程的入口处记录已打开事务的数目.
Select @intErrorCode = @@Error
-----------------------------------------------------------------------------
If @intErrorCode = 0
Begin
Select @intTransactionCountOnEntry = @@TranCount --返回当前连接的活动事务数
BEGIN TRANSACTION --将 @@TRANCOUNT 加 1
End
-----------------------------------------------------------------------------
If @intErrorCode = 0
begin
您的语句......
Select @intErrorCode = @@Error
endIf @intErrorCode = 0
begin
您的语句......
Select @intErrorCode = @@Error
end
-----------------------------------------------------------------------------
If @@TranCount > @intTransactionCountOnEntry --出现异样,要么提交,要么回滚
Begin
If @intErrorCode = 0
COMMIT TRANSACTION
Else
ROLLBACK TRANSACTION
End
-----------------------------------------------------------------------------
return @intErrorCode
2.还有 initially deferred 也可事务结束后检查啊