2010-05-14 83 views
0

我有兩個表。表A和表B.它們是相同的。在10分鐘之內,我需要檢查表A是否有任何變化(新的和更新的),並複製到表B中,並且如果我看到不同並且新的,請在表C中輸入。表同步並複製到其他表

我還需要登錄是否有表A的任何新記錄表B和表C

蔭打算做加盟和比較的記錄。如果我這樣做,我可能會錯過新紀錄。有沒有更好的方法來做這種同步。它必須在SQL中完成,我不能使用任何其他工具,如SSIS。

回答

2

這是我在SQL做一些簡單的表格,想出了:

# create some sample tables and data 
DROP TABLE alpha; 
DROP TABLE beta; 
DROP TABLE charlie; 

CREATE TABLE `alpha` (
    `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, 
    `data` VARCHAR(32) DEFAULT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=MYISAM DEFAULT CHARSET=latin1; 

CREATE TABLE `beta` (
    `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, 
    `data` VARCHAR(32) DEFAULT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=MYISAM DEFAULT CHARSET=latin1; 

CREATE TABLE `charlie` (
    `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, 
    `data` VARCHAR(32) DEFAULT NULL, 
    `type` VARCHAR(16) DEFAULT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=MYISAM DEFAULT CHARSET=latin1; 

INSERT INTO alpha (data) VALUES ("a"), ("b"), ("c"), ("d"), ("e"); 
INSERT INTO beta (data) VALUES ("a"), ("b"), ("c"); 

# note new records of A, log in C 
INSERT INTO charlie (data, type) 
    (SELECT data, "NEW" 
    FROM alpha 
    WHERE id NOT IN 
     (SELECT id 
     FROM beta)); 

# insert new records of A into B 
INSERT INTO beta (data) 
    (SELECT data 
    FROM alpha 
    WHERE id NOT IN 
     (SELECT id 
     FROM beta)); 

# make a change in alpha only 
UPDATE alpha 
SET data = "x" 
WHERE data = "c"; 

# note changed records of A, log in C 
INSERT INTO charlie (data, type) 
    (SELECT alpha.data, "CHANGE" 
    FROM alpha, beta 
    WHERE alpha.data != beta.data 
    AND alpha.id = beta.id); 

# update changed records of A in B 
UPDATE beta, alpha 
SET beta.data = alpha.data 
WHERE alpha.data != beta.data 
AND alpha.id = beta.id; 

當然,你將不得不擴大這一數據的類型,字段數等但如果它有幫助,這是一個基本的概念。

0

希望您有一個表中使用一個良好的唯一關鍵。要獲得新的記錄,你可以做到以下幾點:

SELECT * FROM tableA 
WHERE NOT EXISTS(SELECT * FROM tableB WHERE pkey.tableA = pkey.TableB) 
1

很遺憾,你不能使用SSIS(不允許?),因爲它是專門針對這種事情。無論如何,使用純SQL你應該能夠像下面這樣:如果你的表有一個創建/更新的時間戳列,那麼你可以查詢表B中最高的一個,並獲得表A中所有記錄的時間戳高於那個。 如果沒有時間戳可以使用,希望有一個類似於int的PK,可以用相同的方式使用。

希望有幫助嗎? 華倫天奴。

+0

有由場 表中沒有更新了它的產品。有沒有其他方式 ? – user171523 2010-05-14 20:26:10

1

我會嘗試使用觸發器或事務複製。

+0

這種類型的事情正是爲觸發器開發的。 – NotMe 2010-05-14 20:29:26

相關問題