带有参数化查询的DBI :: dbSendQuery对于SQL Server不起作用

问题描述 投票:0回答:1

我在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)
sql r sql-server dbi
1个回答
0
投票

尝试一下(不运行):

# 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)
© www.soinside.com 2019 - 2024. All rights reserved.