R - 使用 RODBC 在 SQL 服务器上更新数据
R - Updating data on SQL Server with RODBC
我正在 运行R 中编写一个脚本,然后需要将其结果发送到 SQL 服务器。
在第一个运行期间我使用了这个代码:
sqlSave(conn, df, tablename = "myschema.result_table", rownames=FALSE,
append=FALSE, varTypes=varTypes)
因此 table 已创建,一切正常。现在我想按以下方式更新结果:
- 如果
Id
存在于 result_table
中,请更新内容。
- 如果
Id
不存在于 result_table
中,请在行后附加此 Id
。
问题是,如果我使用:
sqlUpdate(conn, df, tablename = "myschema.result_table", index = "Id", fast = FALSE)
一旦脚本发现 Id
不存在于 result_table
中,我就会收到错误消息。当将 sqlSave
与 append=TRUE
一起使用时,所有内容都会在没有进一步检查的情况下附加,并且我得到双行。
这个问题有什么解决办法吗?还是我必须每次都创建一个新结果table,然后再将这些table合并到SQL?
有几种简单的方法可以解决这个问题:
1) 将您现有的 ID 带入 R,从您的最终数据框中提取现有 ID,根据两个数据框插入和更新。以下是如何使用 R 中的数据帧更新 table 的示例:
How to update rows in Database with values from data.frame in R conditionally
2) 将所有结果转储到 SQL 中的 table,然后 运行 更新现有 ID 的数据,插入不存在的 ID 的数据,然后清除的存储过程出来说 table.
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 中的临时 table(全局,因此您可以在 R 中访问)- 然后执行与 #2 相同的步骤。
不确定这是一次性的,还是您会经常做的事情。正确答案取决于此。希望我有所帮助!
我正在 运行R 中编写一个脚本,然后需要将其结果发送到 SQL 服务器。
在第一个运行期间我使用了这个代码:
sqlSave(conn, df, tablename = "myschema.result_table", rownames=FALSE,
append=FALSE, varTypes=varTypes)
因此 table 已创建,一切正常。现在我想按以下方式更新结果:
- 如果
Id
存在于result_table
中,请更新内容。 - 如果
Id
不存在于result_table
中,请在行后附加此Id
。
问题是,如果我使用:
sqlUpdate(conn, df, tablename = "myschema.result_table", index = "Id", fast = FALSE)
一旦脚本发现 Id
不存在于 result_table
中,我就会收到错误消息。当将 sqlSave
与 append=TRUE
一起使用时,所有内容都会在没有进一步检查的情况下附加,并且我得到双行。
这个问题有什么解决办法吗?还是我必须每次都创建一个新结果table,然后再将这些table合并到SQL?
有几种简单的方法可以解决这个问题:
1) 将您现有的 ID 带入 R,从您的最终数据框中提取现有 ID,根据两个数据框插入和更新。以下是如何使用 R 中的数据帧更新 table 的示例:
How to update rows in Database with values from data.frame in R conditionally
2) 将所有结果转储到 SQL 中的 table,然后 运行 更新现有 ID 的数据,插入不存在的 ID 的数据,然后清除的存储过程出来说 table.
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 中的临时 table(全局,因此您可以在 R 中访问)- 然后执行与 #2 相同的步骤。
不确定这是一次性的,还是您会经常做的事情。正确答案取决于此。希望我有所帮助!