无法从 R 中的 DF 更新 SQL Server 中的值
Posted
技术标签:
【中文标题】无法从 R 中的 DF 更新 SQL Server 中的值【英文标题】:Unable to Update Values in SQL Server from DF in R 【发布时间】:2021-04-14 18:16:45 【问题描述】:想要更新 SQL Server 数据库中的值,但值没有更新。
代码运行没有任何错误。
# Df is like supp_pivot:
DateID Buyer Supplier Rel Res Agl
--------------------------------------------
20210414 1 21 0.74 0.53 0.82
.
.
.
-------------------------------------------
#Code:
db <- odbcDriverConnect(paste0("DRIVER=SQL Server;
server=",my_server,";
database=",my_db,";
uid=",my_username,";
pwd=",my_pwd))
for(row in 1:nrow(supp_pivot))
query <- paste0(
"UPDATE rawcalculations SET Res = " ,supp_pivot$Res[row],
"Rel = " ,supp_pivot$Rel[row],
"Agl = " ,supp_pivot$Agl[row],
"WHERE DateID = " ,supp_pivot$DateID[row],
"BuyerID = " ,supp_pivot$Buyer[row],
"SupplierID = " ,supp_pivot$suppliers[row]
)
sqlQuery(db, query)
没有收到任何错误,但数据库中的数据未更新。
【问题讨论】:
【参考方案1】:您可以创建一个临时表并在单个查询中执行更新:
# Create temporary table
sqlSave(db, supp_pivot, tablename = "#TEMP")
query <-"
UPDATE rawcalculations
SET rawcalculations.Res = t.Res,
rawcalculations.Rel = t.Rel,
rawcalculations.Agl = t.Agl
FROM
rawcalculations
INNER JOIN
#TEMP t
ON
rawcalculations.DateID = t.DateID,
rawcalculations.BuyerID = t.Buyer,
rawcalculations.SupplierID = t.suppliers;"
sqlQuery(db, query)
#Remove temporary table
sqlQuery(db,"DROP TABLE #TEMP")
请注意,在创建临时表后,您可以出于调试目的检查应更新哪些行:
SELECT * FROM
rawcalculations
INNER JOIN
#TEMP t
ON
rawcalculations.DateID = t.DateID,
rawcalculations.BuyerID = t.Buyer,
rawcalculations.SupplierID = t.suppliers;
【讨论】:
以上是关于无法从 R 中的 DF 更新 SQL Server 中的值的主要内容,如果未能解决你的问题,请参考以下文章
无法在 R 中使用 sqlSave 追加到 SQL Server 表