我在R中运行脚本,然后需要将其结果发送到SQL Server。
在第一次运行中,我使用了以下代码:
sqlSave(conn, df, tablename = "myschema.result_table", rownames=FALSE,
append=FALSE, varTypes=varTypes)
这样就创建了表格,并且一切正常。现在,我想通过以下方式更新结果:
Id
存在于中result_table
,则更新内容。Id
不存在,则在result_table
此行后面附加Id
。问题是,如果我使用:
sqlUpdate(conn, df, tablename = "myschema.result_table", index = "Id", fast = FALSE)
一旦脚本在中发现Id
不存在的错误,我就会收到错误消息result_table
。当sqlSave
与一起使用时append=TRUE
,所有内容都将追加而无需进一步检查,而我会得到双行。
有没有解决此问题的方法,还是我每次都必须创建一个新的结果表,然后再在SQL中合并这些表?
有几种简单的方法可以解决此问题:
1)将您现有的ID放入R,从最终数据框中提取现有ID,并基于两个数据框进行插入和更新。这是一个如何在R中使用数据框更新表的示例:
如何有条件地使用R中data.frame中的值更新数据库中的行
2)将所有结果转储到SQL中的表中,然后运行存储过程,以更新现有ID的数据,插入不存在ID的数据,然后清除该表。
UPDATE t
SET t.Col1 = r.Col1
FROM table t
JOIN tablefromr r --Existing
ON t.ID = r.ID
INSERT INTO table
SELECT r.*
FROM tablefromr r
LEFT JOIN table t
ON r.ID = t.ID
WHERE t.ID IS NULL --Not Existing
TRUNCATE TABLE tablefromr
3)将结果转储到SQL的临时表中(全局,因此可以在R中访问)-然后执行与#2相同的步骤。
不知道这是一次性的,还是您会经常做的事情。正确的答案取决于此。希望我能帮上忙!
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句