我有兩個表。表A和表B.它們是相同的。在10分鐘之內,我需要檢查表A是否有任何變化(新的和更新的),並複製到表B中,並且如果我看到不同並且新的,請在表C中輸入。表同步並複製到其他表
我還需要登錄是否有表A的任何新記錄表B和表C
蔭打算做加盟和比較的記錄。如果我這樣做,我可能會錯過新紀錄。有沒有更好的方法來做這種同步。它必須在SQL中完成,我不能使用任何其他工具,如SSIS。
我有兩個表。表A和表B.它們是相同的。在10分鐘之內,我需要檢查表A是否有任何變化(新的和更新的),並複製到表B中,並且如果我看到不同並且新的,請在表C中輸入。表同步並複製到其他表
我還需要登錄是否有表A的任何新記錄表B和表C
蔭打算做加盟和比較的記錄。如果我這樣做,我可能會錯過新紀錄。有沒有更好的方法來做這種同步。它必須在SQL中完成,我不能使用任何其他工具,如SSIS。
這是我在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;
當然,你將不得不擴大這一數據的類型,字段數等但如果它有幫助,這是一個基本的概念。
希望您有一個表中使用一個良好的唯一關鍵。要獲得新的記錄,你可以做到以下幾點:
SELECT * FROM tableA
WHERE NOT EXISTS(SELECT * FROM tableB WHERE pkey.tableA = pkey.TableB)
很遺憾,你不能使用SSIS(不允許?),因爲它是專門針對這種事情。無論如何,使用純SQL你應該能夠像下面這樣:如果你的表有一個創建/更新的時間戳列,那麼你可以查詢表B中最高的一個,並獲得表A中所有記錄的時間戳高於那個。 如果沒有時間戳可以使用,希望有一個類似於int的PK,可以用相同的方式使用。
希望有幫助嗎? 華倫天奴。
有由場 表中沒有更新了它的產品。有沒有其他方式 ? – user171523 2010-05-14 20:26:10