在两个timeskip数据库传输数据之间获取切片数据

时间:2015-09-14 07:03:05

标签: mysql sql sql-server data-transfer

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

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

示例:

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

那么,我怎么知道从MySQL中删除了哪个ID然后在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

请帮忙。

2 个答案:

答案 0 :(得分:0)

我不了解SQL-Server代码的任何内容,但我建议通过应用程序进行复制。因此,对于更大,更动态的数据表,您可以定义delete_pendafterinsert_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,但必须小心谨慎。

你时不时地制作一份完整的副本,你应该写一些检查以确保数据是一致的。

答案 1 :(得分:0)

刚从我的伴侣那里得到了答案。 首先,从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] 

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