首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带有参数化查询的DBI::dbSendQuery不适用于SQL Server

带有参数化查询的DBI::dbSendQuery不适用于SQL Server
EN

Stack Overflow用户
提问于 2019-10-12 12:51:24
回答 1查看 357关注 0票数 1

我的SQL Server中有一个数据库表dbo.address。我想在这个表中插入一行。我使用dbSendQuery将插入查询发送到数据库。

我想要的是使用参数化查询,如下例所示。我不想使用paste来构造查询字符串,因为它会变得非常混乱,特别是当有很多列的时候。

我下面的代码不能工作。?适用于mySQL,但在我的例子中不适用于SQL Server。

有人知道如何将参数传递给查询字符串吗?非常感谢!

顺便说一句,我知道我的数据库连接是好的。通过简单的查询就可以了。

代码语言:javascript
运行
复制
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)
EN

回答 1

Stack Overflow用户

发布于 2019-10-12 15:24:44

尝试此操作(不运行):

代码语言:javascript
运行
复制
# 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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58350966

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档