我必须将数据从MS Access DB转移到另一个。 这是使用的插入语句
cmd.CommandText = @"Insert Into [MS Access;PWD=pw;DATABASE=" + currentDBPath + @"].[Orders] Select * FROM [Orders] where OrderDate>=#" + from.ToShortDateString() + "# and OrderDate <=#" + to.ToShortDateString() + "# and IsCustomer=Yes ";
此声明正常。但是有些人开始直接将数据输入到目标数据库和源数据库中。这创建了重复的记录。现在我想从源中复制那些不在目标DB表中的命令。
答案 0 :(得分:1)
假设Orders表有一个名为IDOrers的主键,则必须将两个表都带到一个DB,以便比较数据。
简易选项:在Sours DB中有一个指向目标数据库[订单]的链接,名为OrdersDest
。在这种情况下,您在目标上创建一个名为MissingOrders
的缺失订单查询:
SELECT Orders.* FROM Orders LEFT JOIN OrdersDest ON OrdersDest.IDOrders = Orders.IDOrders WHERE OrdersDest.IDOrders Is Null
你的命令现在看起来像这样:
cmd.CommandText = @"Insert Into [MS Access;PWD=pw;DATABASE=" + currentDBPath + @"].[Orders] Select * FROM [MissingOrders] where OrderDate>=#" + from.ToShortDateString() + "# and OrderDate <=#" + to.ToShortDateString() + "# and IsCustomer=Yes ";
您还可以通过此链接表传递数据:
cmd.CommandText = @"Insert Into [OrdersDest] Select * FROM [MissingOrders] where OrderDate>=#" + from.ToShortDateString() + "# and OrderDate <=#" + to.ToShortDateString() + "# and IsCustomer=Yes ";
答案 1 :(得分:1)
我在我的问题中找不到任何解决方案,所以我决定删除目标数据库中的重复数据。
我使用以下语句删除数据
Delete * from Orders where AutoOrderID in (SELECT Orders.AutoOrderID FROM Orders Inner JOIN OrdersSource ON OrdersSource .OrderId = Orders.OrderId and OrdersSource .OrderDate=Orders.OrderDate);