根据字段

时间:2016-12-31 20:51:27

标签: sql sql-server sql-server-2014

我有一个临时表Temp_Table,根据它的两个字段,我需要在其他表中插入行,Table1和Table2

这些是实现这些目标的条件,

  1. 如果Temp_Table.Field1 = Table1.Field1和Temp_Table.Field2> Table1.Field2 然后,将行从Table1移到Table2,并将行从Temp_Table复制到Table1。

  2. 如果Temp_Table.Field1 = Table1.Field1和Temp_Table.Field2< Table1.Field2 然后,将行从Temp_Table复制到Table2。

  3. 如果Temp_Table.Field1在Table1中找不到任何匹配项,请将Temp_Table中的行复制到Table1。

  4. 由于Table1和Table2都有触发器,因此输出子句没有用。 Temp_Table本身可能具有Field1的重复值,因此需要对每一行进行检查。

    我怎样才能通过mySql实现这一目标?

    我将尝试显示一些示例数据。所有表都没有自动生成的ID。

    表1:

    Id         Field1          Field2           Field3
    0            1             30 Dec 2016        data1
    

    表2:

    Id        Field1           Field2          Field3
    

    Temp_Table:

    Id        Field1           Field2          Field3
    1           1              29 Dec 2016      data2
    2           2             31 Dec 2016       data3
    3           2             01 Jan 2017       data4
    

    结果表: 表1:

    Id       Field1        Field2          Field3
    0         1            30 Dec 2016     data1
    3         2            01 Jan 2017     data4
    

    Tabl2:

    Id         Field1          Field2          Field3
    1            1           29 Dec 2016       data2
    2            2           31 Dec 2016       data3
    

1 个答案:

答案 0 :(得分:0)

听起来有些操作需要一起执行,事务是使它们全部工作或全部失败的好方法。

我只提供了伪查询,因为使用的实际查询可能会随着您习惯的尝试而发展。

概念:

  • 存储过程
  • TRY / CATCH块
  • 开始/提交/回滚Tran
  • 左连接查询以检测缺失的记录

示例:

begin proc Abc as
begin
  begin try
    begin tran
      --Step 1
      Insert Table2 select Table1
      Delete from Table1
      insert into Table1 select TempTable
      --Step 2
      insert into Table2 select TempTable
      --Step 3
      insert into Table1 select TempTable left join Table1
    commit tran
  end try
  begin catch
    rollback tran
  end catch
end