SQL从多个存储过程插入回滚提交

时间:2013-05-22 22:48:36

标签: sql stored-procedures sql-server-2008-r2 rollback

我有C#代码(wcf)连接到数据库并插入一个完整的“报告”,包括地址表,人员表等,这些都必须通过调用存储过程来完成。另外,一些存储过程可能被多次调用(因为我们在报告中可能有多个人和多个地址等)

插入地址(通过调用spInsertAddress) 插入人(通过调用spInsertPerson) 插入项(调用另一个存储过程)会抛出错误(可能是太多字符,或者为日期/时间字段插入错误的值)

如何撤消存储过程已经完成的所有更改?

在MSDN上找到这个article,解释如何通过C#添加事务并使用try / catch来提交或回滚事务

2 个答案:

答案 0 :(得分:1)

您可以从C#(MSDN)调用BeginTransaction,然后根据需要提交或回滚事务。但是您必须确保存储过程本身不执行COMMIT或ROLLBACK语句。请注意,Sql Server不支持您预期的嵌套事务。

答案 1 :(得分:0)

根据我的经验,在事务提交后没有回滚。我建议你重写调用插入的代码,确保你管理发送的值,这样就不会出错。最佳做法是在保存到数据库之前验证所有数据。您没有提到正在使用的数据库,有些数据库有不同的选项。