使用 R 更新 SQL Server 中表的多个列

Posted

技术标签:

【中文标题】使用 R 更新 SQL Server 中表的多个列【英文标题】:Update multiple columns of a table in SQL Server using R 【发布时间】:2017-08-19 07:10:45 【问题描述】:

这是 SQL Server 中的table1

Last   Country   colA   colB   colC
------------------------------------
1      ARG       NA     NA     NA
2      NULL      NA     NA     NA
3      CAM       NA     NA     NA
4      NULL      NA     NA     NA
5      NULL      NA     NA     NA

这是我在 R 中的数据框 DF

colA   colB   colc
20     foo    1.2
12     bar    12.2
1      tam    10.3
15     red    0.8

现在我如何迭代DF 中的每一行,以便可以在table1 中更新它?

这是r中的代码

conn <- odbcDriverConnect('DRIVER=SQL Server;SERVER=dusty;DATABASE=Area;UID=admin;PWD=abcd@123;autocommit=True')
data <- sqlQuery(conn,paste("select * from table1;"))
for(i in 1:length(DF)) 
update.query <- paste("UPDATE table1 ", 
                       "SET colA=?",
                       "SET colB=?",
                       "SET colC=?",
                       "WHERE Country is NULL", sep="")
dummy <- sqlQuery(conn, update.query)

有什么建议吗?

谢谢。

【问题讨论】:

【参考方案1】:

我认为这样的事情应该为你做。

library(RODBC)

connHandle <- odbcConnect("cakesDatabase")
newData <- read.csv("newData.csv", stringsAsFactors = F)

for(row in 1:nrow(newData))
  query <- paste0(
    "UPDATE cakes 
     SET price = ", newData$price[row], " 
     WHERE cake = '", newData$cake[row], "'"
  )
  sqlQuery(connHandle, query)


odbcClose(connHandle)

【讨论】:

【参考方案2】:
library("RODBC")

connection <- odbcDriverConnect('driver=SQL Server;
                            server=server_name;
                            database=db_name;
                            trusted_connection=true')

column1 <- 6
column2 <-999
column3 <- 999
column4 <- 44
column5 <- -128

#update data
update_data <- paste0("UPDATE TABLE 
                  SET column2 = ",column2,", column3 = ",column3," , column4 = 
",column4,", column5 = ",column5,"  
                  where column1= ",column1,"")
#execute updata data
update_recorddf<-sqlQuery(connection,update_data) 

odbcClose(connection)

【讨论】:

以上是关于使用 R 更新 SQL Server 中表的多个列的主要内容,如果未能解决你的问题,请参考以下文章

使用带有 Linq to Sql 的 Sql Server 唯一标识符/更新日期列 - 最佳方法

在sql server中用一个条件更新多个列

根据 SQL Server 2008R2 中表中的列获取计数

SQL Server 删除触发器以更新同一表中的多个列

Sql Server 2008 中 1 个几何列与 4 个小数的相对性能是多少?

SQL Server:交叉引用一个表中的多个列与另一个表中的多个列