【问题标题】:Getting sliced data between two timeskip database transfer data在两个 timeskip 数据库传输数据之间获取切片数据
【发布时间】:2015-12-10 02:33:23
【问题描述】:

如何获取“切片”数据并从数据库中删除数据?

我使用了两个数据库 MySQL 和 SQL SERVER。

例子:

昨天我从 MySql 向 Sql Server 传输数据大约 1000 行, 然后今天我只是在MySql中删除了5行然后再次进行了传输。

那么,我如何知道哪个 ID 从 MySQL 中删除,然后在 SQL Server 中删除?

我正在使用存储过程传输数据,该存储过程检查每个循环插入中的每个 ID。

foreach($data AS $key => $value){ $this->MsSQL->Exec('exec sp_pendaftar {ID} {NAME}'); }

我有这样的存储过程:

CREATE PROCEDURE [dbo].[sp_pendaftar] @id INT,@name varchar(45) AS DECLARE @id nvarchar(40); SET NOCOUNT ON; SET @id = (SELECT TOP 1 id FROM t_pendaftar WHERE  id = @id);
IF @id IS NULL BEGIN
    INSERT INTO t_pendaftar VALUES(@id,@name); 
    END;
    ELSE
    BEGIN
    UPDATE t_pendaftar SET name = @name WHERE id = @id;
    END;
GO

请帮忙。

【问题讨论】:

    标签: mysql sql sql-server data-transfer


    【解决方案1】:

    我对 SQL-Server 代码一无所知,但我建议通过应用程序进行复制的一部分。因此,对于更大、更动态的数据表,您可以定义一个delete_pendafter 和一个insert_pendafer 表(如果需要,还可以定义一个change_pendafter)。

    在从 t_pendafter 中删除之前,您只需将这些行选择到 delete_pendafter 中。这甚至可以通过触发器来实现,前提是它不会过多地减慢应用程序的速度。

    在 SQL-Server 端,我希望你有一个 delete-join,所以你只需删除已删除的行。在 MySQL 中,这看起来像

    DELETE orig 
    FROM t_pendafter AS orig 
    INNER JOIN delete_pendafter AS del ON del.id = orig.id
    

    此解决方案可以扩展到 INSERT 和 CHANGE,但必须小心操作。

    你应该不时地做一个完整的副本,你应该写一些检查来确保数据是一致的。

    【讨论】:

      【解决方案2】:

      刚刚从我的搭档那里得到了一些答复。 首先,从 MySQL DB 中获取数组 id,然后从 SQL Server 中获取数组 id,并使用 array_diff() 比较 SQL Server 中不存在的 id。

      $MySQL : array[id] => [11,12,13,15,16,19,25]
      $SQL_Server : array[id] => [11,12,13,14,15,16,17,18,19,20,21,23,24,25 ]
      $array_to_be_deleted : array($SQL_Server , $MySQL)
      print_r($array_to_be_deleted);
      result would be:
      array => [14,17,18,20,21,23,24] 
      

      希望任何人都可以尝试纠正我。

      【讨论】:

      • 这应该是对这个新问题的回答吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多