我在SQL Server中有一个数据库表dbo.address
。我想在此表中插入一行。我使用dbSendQuery
将插入查询发送到数据库。
我想要的是使用参数化查询,如下例所示。我不想使用paste
来构造查询字符串,因为它变得非常混乱,尤其是在有很多列的情况下。
下面的我的代码不起作用。 ?
适用于mySQL,但不适用于SQL Server。
有人知道如何将参数传递给查询字符串吗?非常感谢!
BTW,我知道我的数据库连接很好。通过简单的查询那里工作正常。
library(DBI)
library(odbc)
conn <- DBI::dbConnect(odbc::odbc(),
Driver = "ODBC Driver 13 for SQL Server",
Server = serverName,
Database = dbName,
UID = username,
PWD = pasword,
port=1433)
query = "insert into dbo.address (AddressID, City, PostalCode) values (?,?,?)"
dbSendQuery(conn, query, param=list(1, 'seatle', '98876'))
dbDisconnect(conn)
尝试一下(不运行):
# Install and initialise packages:
necessary_packages <- c("DBI", "odbc")
new_packages <- necessary_packages[!(necessary_packages %in% installed.packages()[,"Package"])]
if(seq_along(new_packages) > 0){install.packages(new_packages, dependencies = TRUE)}
lapply(necessary_packages, require, character.only = TRUE)
# Create vectors thats values are to be used in query:
AddressID_vec <- 1
City_vec <- 'seatle'
PostalCode_vec <- '98876'
# Connect to DB:
conn <- DBI::dbConnect(odbc::odbc(),
Driver = "ODBC Driver 13 for SQL Server",
Server = serverName,
Database = dbName,
UID = username,
PWD = pasword,
port = 1433)
# Concatenate base query and vecs:
query <- paste0("insert into dbo.address (AddressID, City, PostalCode) values (",
AddressID_vec,
", ",
City_vec,
", ",
PostalCode_vec,
")"
# Send Query:
dbSendQuery(conn, query)
# Close Connection:
dbDisconnect(conn)