当前位置: 代码迷 >> Sql Server >> 急SQL2005存储过程和事务回滚Transact-SQL解决思路
  详细解决方案

急SQL2005存储过程和事务回滚Transact-SQL解决思路

热度:98   发布时间:2016-04-27 12:58:47.0
急--SQL2005存储过程和事务回滚Transact-SQL
SQL2005建立两个存储过程,无参数,有参数
1.当对一张表同时插入10条数据时,在插入到第9条时,报错; 
2.事务回滚 (之前插入数据取消)
3.抛出自定义异常 
4.C# 如何实现获取抛出的异常

------解决方案--------------------
SQL code
--just a example:gocreate proc pro_testasbegin transaction insert tableselect ......if @@error<>0beginprint ‘错误信息:'+ltrim(@@error)rollback transactionendelsebegincommit transactionend
------解决方案--------------------
可以在存储过程中加一个output的参数,让C#得到这个参数的实际值.
------解决方案--------------------
SQL code
goif object_id('test','u')is not nulldrop table testgocreate table test(id int identity(1,1),value varchar(10) check(isnumeric(value)=1))goif OBJECT_ID('pro_test')is not nulldrop proc pro_testgocreate proc pro_test  @value1 varchar(10), @value2 varchar(10),  @value3 varchar(10), @ErrorMessage  varchar(2048) outputasbegin transactionbegin tryinsert test(value)select @value1 union allselect @value2 union allselect @value3end trybegin catch SELECT @ErrorMessage=ERROR_MESSAGE()end catchif @ErrorMessage is not null beginselect @ErrorMessage as ENDMessagerollback transaction endelsebeginselect '插入成功' as ENDMessagecommit transactionend--演示插入失败godeclare @ErrorMessage varchar(2048)exec pro_test '12345','af345','90dg',@ErrorMessage output  /*ENDMessageINSERT 语句与 CHECK 约束"CK__test__value__02DD43D9"冲突。该冲突发生于数据库"master",表"dbo.test", column 'value'。*/--演示插入成功godeclare @ErrorMessage varchar(2048)exec pro_test '12345','56324','8956',@ErrorMessage output  /*ENDMessage插入成功*/select * from test/*id    value1    123452    563243    8956*/--刚刚回来,写了一个例子,不知道符合你的要求么
------解决方案--------------------
写成存储过程
同时加上try catch 
  相关解决方案