当前位置: 代码迷 >> Sql Server >> 有个需求不知道是否用事务来处理
  详细解决方案

有个需求不知道是否用事务来处理

热度:24   发布时间:2016-04-24 09:19:10.0
有个需求不知道是不是用事务来处理
两张表

表A :
姓名     年龄   
张三     29
李四     30

表B :
姓名      性别
张三      男
李四      女

需求是这样
①用户输入 王五  32  男
②先去查表 A与B 是否有 王五
③有的话 delete from 表A where 姓名=‘王五’
                 delete from 表B where 姓名=‘王五’
没有的话直接到下一步
④接着插入insert into 表A (姓名,年龄) value(‘王五’,32) 
                    insert into 表B (姓名,性别) value(‘王五’,'男')
以上一系列的表操作 是不是用事务来封装成一个对象呢?是不是可以同步?如果是的话今天算是开始用到事务来处理了。
不知道sql语句怎么写,还有我是用 C# 的 ADO.NET 来操作数据库的
 

------解决思路----------------------
TransactionScope就只要写单句的……你打开那个链接,上面有例子的
至于sql的事务,如果你写存储过程,那么就用楼上的begin tran包含一个个单句sql,包含判断什么的可能是类似下面的代码
DECLARE @existName BIT
SELECT @existName=( SELECT TOP 1 1 FROM tableName)
IF(@existName=1)
BEGIN
 --删除
--新增
 END


如果你用ado.net的Trans,那就是connection.BeginTran,然后一句句sql执行
------解决思路----------------------

--写了个比较一般的样子,参考一下:
  begin tran  --开始事务
             --应该是通过程序传参数值得形式获取表单中的姓名值吧
        declare @count1 int,@count2 int
         select @count1=count(姓名) from a where 姓名='name_value'  --姓名表单值
         select @count2=count(姓名) from b  where 姓名='name_value'
         if @count1!=0 or @count2!=0
             begin
                        delete from a where 姓名='name_value'
                        delete from a where 姓名='name_value'
             end
         else
                    insert into 表A (姓名,年龄)  values('name_value',age_value) 
                    insert into 表B (姓名,性别)  values('name_value','sex_value')
if @@error>0   --判断是出错(这是一个全局变量,上面有点问题)
         rollback;
  else
      commit   --出错即回滚
  相关解决方案