我通过从本地MSSQL中逐行比较来更新远程MySQL数据库。想法是通过3个步骤进行更新:
1:从本地选择所有ID并在远程执行以下查询:
delete from REMOTE_DATABASE.TABLE where ID not in
( list of LOCAL_DATABASE.TABLE ID's linked by OR condition )
2:从LOCAL_DATABASE.TABLE中选择遥控器上不存在的ID并插入
3:更新包含两个表的行。
我的问题是关于第一步:我有50000多种产品。我在C#工作,我可以加入所有ID的字符串,但我想知道可以查询50000 ID由OR条件链接执行?这是一种错误的做法吗?
答案 0 :(得分:0)
所以我以前就这样做了。很久以前,虽然如此,我可能会错过一步,但我希望你能得到这个想法。
SELECT
您希望从链接服务器将所有表转换为MSSQL SQL上的临时表。像SELECT * INTO #temp FROM linkedserver.tablename
这样的东西,但最好是创建一个合适的临时表并索引你要加入的列,即
CREATE TABLE #Test
(
ID INT PRIMARY KEY NOT NULL
)
INSERT INTO #Test
SELECT * FROM linkedserver.tablename
执行LEFT / RIGHT JOIN以在本地计算机上查找新ID,并通过链接服务器将其插入远程服务器。有关如何在比较两个表Using Left join to find new rows
使用UPDATE语句更新远程服务器并在其中加入JOIN。因此,基本上使用INNER JOIN使用临时表中的值更新远程服务器。
现在可能会遇到一些错误,语法在这里发布,我可以尝试为您解决它们。但是,我已经使用这种技术在MySQL和MSSQL服务器之间进行同步,并且它运行良好。因为它基于SETS而不是基于RBAR,所以它也非常快。