存储过程异常,不能返回值。
INSERT tb_student_score (xh, xm, kcapbm, kcdm, kcxzdm, xn, xq, xf)
VALUES(@xh, @xm, @kcapbm, @kcdm, @kcxzdm, @xn, @xq, @xf)
IF @@error <> 0
RETURN 3 --failure
ELSE
RETURN 0 --success
以上是存储过程中的一段,现在执行insert违反了约束,为什么就不继续往下走,我跟踪是也是这样。一下是sql query输出的信息:
服务器: 消息 2627,级别 14,状态 2,过程 pr_add_select,行 138
[Microsoft][ODBC SQL Server Driver][SQL Server]违反了 UNIQUE KEY 约束 'UK_ss_sid_kcdm_xn_xq'。不能在对象 'tb_student_score' 中插入重复键。
语句已终止。
获取调用堆栈失败!
问题点数:100、回复次数:12Top
1 楼zonelive(peter)回复于 2004-09-04 00:27:53 得分 5
提示的很清楚啊
根据提示去查看一下应该明白吧
"
违反了 UNIQUE KEY 约束 'UK_ss_sid_kcdm_xn_xq'。不能在对象 'tb_student_score' 中插入重复键。"Top
2 楼zheninchangjiang(徐若涵)回复于 2004-09-04 06:41:39 得分 5
不知道你要什么结果Top
3 楼zjcxc(邹建)回复于 2004-09-04 08:04:01 得分 50
--下面演示了SQL错误处理的脆弱性
--邹建
--演示1
--测试的存储过程1
create proc p1
as
print 12/0
if @@error<>0
print '发生错误1'
select * from newid()
if @@error<>0
print '发生错误2'
go
--调用
exec p1
go
--删除测试
drop proc p1
/*--测试结果
服务器: 消息 8134,级别 16,状态 1,过程 p1,行 6
遇到被零除错误。
发生错误1
服务器: 消息 208,级别 16,状态 1,过程 p1,行 10
对象名 'newid' 无效。
--*/
/*--结论1:
错误1,不是严重的错误,所以SQL会执行下去
错误2,属于严重的错误,所以SQL没有执行下去,因为没有第二个print的结果
--*/
Top
4 楼zjcxc(邹建)回复于 2004-09-04 08:04:26 得分 30
--演示2,存储过程嵌套调用中的错误
--测试的存储过程1
create proc p1
as
print 12/0
if @@error<>0
print '发生错误1'
select * from newid()
if @@error<>0
print '发生错误2'
go
--测试的存储过程2
create proc p2
as
exec p1
if @@error<>0
print '调用 存储过程1 异常结束'
else
print '调用 存储过程1 正常结束'
go
--调用
exec p2
go
--删除测试
drop proc p1,p2
/*--测试结果
服务器: 消息 8134,级别 16,状态 1,过程 p1,行 8
遇到被零除错误。
发生错误1
服务器: 消息 208,级别 16,状态 1,过程 p1,行 12
对象名 'newid' 无效。
调用 存储过程1 异常结束
--*/
/*--结论2:
被调用的存储过程发生严重错误时,调用它的存储过程可以捕获错误,并可以继续执行下去
--*/
Top
5 楼zjcxc(邹建)回复于 2004-09-04 08:04:36 得分 5
--演示3,更严重的错误,无法用 set xact_abort on 来自动回滚事务
set xact_abort on --我们希望能自动回滚事务
begin tran
create table #t(id int)
insert #t select 1
select * from newid()
commit tran
go
select * from #t
rollback tran
/*--测试结果
(所影响的行数为 1 行)
服务器: 消息 208,级别 16,状态 1,行 5
对象名 'newid' 无效。
id
-----------
1
(所影响的行数为 1 行)
--*/
/*--结论3:
我们希望 set xact_abort on 可以实现出错时自动回滚事务
但结果令我们希望,出错时,事务并没有被回滚
因为我们查询到了#t的结果,而且最后的回滚语句也并没有报错
--*/
Top
6 楼NewLocksmith(!&)回复于 2004-09-04 09:43:13 得分 0
那么,各位高手,我的存储过程 RETURN 3 没有办法被执行?那我如何判断存储过程执行是否成功呢?在asp中Top
7 楼NewLocksmith(!&)回复于 2004-09-04 09:44:24 得分 0
upTop
8 楼zjcxc(邹建)回复于 2004-09-04 09:54:54 得分 0
在asp中用on error进行错误处理.Top
9 楼NewLocksmith(!&)回复于 2004-09-04 10:16:38 得分 0
To:zjcxc(邹建) ( )
邹老大,麻烦你给个详细的代码如何?Top
10 楼NewLocksmith(!&)回复于 2004-09-04 10:51:56 得分 0
upTop
11 楼haoK(haoK.Y)回复于 2004-09-04 10:59:43 得分 5
请问错误严重到什么程度,才会造成脚本执行中断?或者有其他什么规则?
在《联机丛书》中说:
严重级别为 19 或更高的错误信息将停止当前的批处理。严重级别为 20 或更高的错误信息被认为是严重错误,将终止客户连接。此范围的错误信息可能影响数据库中的所有进程,并可能表明数据库或对象损坏。严重级别从 19 到 25 的错误信息均写入错误日志。
可是以上的错误级别都是16,why回中断下面的脚本执行?
Top
12 楼NewLocksmith(!&)回复于 2004-09-04 13:08:18 得分 0
upTop




