R-使用RODBC在SQL Server上更新数据

M

我在R中运行脚本,然后需要将其结果发送到SQL Server。

在第一次运行中,我使用了以下代码:

sqlSave(conn, df, tablename = "myschema.result_table", rownames=FALSE,
        append=FALSE, varTypes=varTypes)

这样就创建了表格,并且一切正常。现在,我想通过以下方式更新结果:

  1. 如果Id存在于中result_table,则更新内容。
  2. 如果Id不存在,则在result_table此行后面附加Id

问题是,如果我使用:

sqlUpdate(conn, df, tablename = "myschema.result_table", index = "Id", fast = FALSE)

一旦脚本在中发现Id不存在的错误,我就会收到错误消息result_tablesqlSave与一起使用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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章