我有一个常规任务,涉及从一个数据库导出两个表,并将数据导入另一个数据库,其对应的表不为空。其中一个表有一个列,它引用第一个的ID。让我们称之为Customer和Customer_Address,其中Customer_Address的Customer_ID列引用Customer表中的ID。
我需要为这些创建一个导入脚本,它会将Customer记录添加到另一个非空DB,每行ID = max(id)+1,而不会断开与另一个表的链接。 Customer_Address表同样具有自己的ID列,需要以相同的方式递增。
我并不需要让第一个插入的记录比现有的最高ID高一个,但这是最好的。我过去曾设法手动检查目标数据库中的最高ID,并使用搜索和替换以及导入脚本中的变量添加此数字,但是如果有任何记录添加到目标数据库在过渡期间。
我还有另一种方法,包括选择,复制,粘贴和SQL包装选择的所有列,但使用Excel从源表中使用ID并使用select(max)而不是ID,但它又相当繁琐。< / p>
使用数据进行修改 用于创建源表和目标表的示例脚本(为方便起见,在相同的/ temdb数据库中)位于: http://pastebin.com/C64wFtsP
应该输出如下:
select * from customer
id Last First 1 Johnson James 2 Kelly Karl 3 Lawlor Liam
select * from customer2
id Last First 1 Adams Ann 2 Byrne Bressie 3 Casey Charlene
select * from customeraddress
id idclient street city county country 1 1 65 North St. Marcoussin Jojoba Flatland 2 2 42 South St. Marcoussin Jojoba Flatland 3 3 12 West St. Marcoussin Jojoba Flatland 4 1 17 East St. Marcoussin Jojoba Flatland 5 1 75 Centre St. Marcoussin Jojoba Flatland
select * from customeraddress2
id idclient street city county country 1 1 99 North St. Marcoussin Jojoba Flatland 2 2 88 South St. Marcoussin Jojoba Flatland 3 3 88 West St. Marcoussin Jojoba Flatland 4 1 66 East St. Marcoussin Jojoba Flatland 5 1 55 Centre St. Marcoussin Jojoba Flatland
我正在寻找的是一种将两个源表中的数据导入到相应目标表的脚本的方法,同时保留了customeraddress中的idclient与客户中的id之间的链接。
答案 0 :(得分:0)
如果您可以在目标数据库中暂存数据,请执行以下操作:
请注意,您需要为您的客户识别一个自然密钥(使其成为Customer1中也存在于Customer2中的不同实体的东西) - firstName,lastName可能不是最好的,因为它们极不可能在您的客户群中有所区别,但这是您在样本数据中得到的。
INSERT INTO customeraddress2
SELECT
customer2.id,
staged_customeraddress1.street,
staged_customeraddress1.city,
staged_customeraddress1.county,
staged_customeraddress1.country
FROM customer2
JOIN staged_customer1
ON staged_customer1.firstName = customer2.firstName
AND staged_customer1.lastName = customer2.lastName
JOIN staged_customeraddress1
ON staged_customeraddress1.idclient = staged_customer1.id