2015-09-14 77 views
1

如何获取“切片”数据并从数据库中删除数据?在两次数据库传输数据之间获取切片数据

我当时使用了两个数据库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 

请帮助。

回答

0

我不明白SQL-Server代码的任何内容,但我会建议通过应用程序使复制的一部分。因此,对于更大更动态的数据表,您可以定义delete_pendafterinsert_pendafer表(如果需要也可以定义change_pendafter)。

从t_pendafter删除之前,您只需将那些行选入delete_pendafter即可。如果这不会导致应用程序太慢,甚至可能触发器。

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

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

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

每隔一段时间你应该做一个完整的副本,你应该写一些检查,以确保数据是一致的。

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] 

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

+1

这是应该回答这个问题的一个新问题吗? –