如何获取“切片”数据并从数据库中删除数据?
我使用的是两个数据库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
请帮忙。
答案 0 :(得分:0)
我不了解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,但必须小心谨慎。
你时不时地制作一份完整的副本,你应该写一些检查以确保数据是一致的。
答案 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]
希望任何人都可以尝试纠正我。