首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

[讨论100分]存储过程在什么情况下调用不成功?解决办法

2012-01-22 
[讨论100分]存储过程在什么情况下调用不成功?程序是C/S三层的,所有的业务逻辑判断都在存储过程中(包括数据

[讨论100分]存储过程在什么情况下调用不成功?
程序是C/S三层的,所有的业务逻辑判断都在存储过程中(包括数据基本的增,减,删也是)!
保存一个表的数据时,常常调用其它存储过程来更新其它表的相关记录。所以常有锁产生,忙时死锁也存在过。
问题是:时常发生数据未更新的情况,大部分是原因本身的数据表已更新,但调用其它存储过程不成功。
比如:保存表A对应的存储过程是ProA,ProA中调用ProB来Update其它表的相应记录.结果ProA被执行,但ProB没有执行,检查后语法上没有错误。

大家分析一下存储过程在什么情况下调用不成功呢?锁的影响是什么?



[解决办法]
不太清楚。
[解决办法]
最常发生的是数据校验等过不去

[解决办法]
顶上去
[解决办法]
如果没有用事务,这样做是很危险的

死锁和意外出错都会造成数据的部分更改,形成数据不统一

[解决办法]
你可以用事务来回滚。
[解决办法]
使用事务保证数据处理的一致性。

SQL Server的T-SQL支持事务嵌套。

如:


--设置事务处理的一致性开关,如果中途失败,整体回滚。
set xact_abort on


begin tran

...


commit tran

return 0
[解决办法]
一般是数据异常,或者资源锁定的情况下,执行不成功。
[解决办法]
一般修改表什么的,还是用事务吧!
[解决办法]
使用事务保证数据的一致性

SQL有检测死锁功能
一旦发现死锁系统会自动牺牲一个进程来解除死锁
有可能你那个进程被KILL了

[解决办法]
在数据更新中增加事务,保证数据的完整性

在开发工具调用存储过程是,保证能够获取存储过程执行的状况(成功,不成功,或在存储过程中增加错误代码),确保存储过程执行的成功率
[解决办法]
1.比如說插入關鍵字相同的記錄,
2.field(0) : tinyint update field(2)=123434123..
............................

一般是執行到錯的那句吧,可能在proc_A,也可能在proc_B的前幾條語句.....

把數據存起來,手動執行看看..
[解决办法]
使用事务保证数据的一致性,这样比较好

热点排行