2015-09-14 75 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

這是應該回答這個問題的一個新問題嗎? –