DBI :: dbSendQuery с параметризованным запросом не работает для SQL Server - PullRequest
0 голосов
/ 12 октября 2019

У меня есть таблица базы данных dbo.address в моем SQL Server. Я хочу вставить строку в эту таблицу. Я использую dbSendQuery для отправки запроса на вставку в базу данных.

Я хочу использовать параметризованный запрос, как в примере ниже. Я не хочу использовать paste для построения строки запроса, потому что это становится очень запутанным, особенно если есть много столбцов.

Мой код ниже не работает. ? работает для mySQL, но не для SQL Server в моем случае.

Кто-нибудь знает, как передать параметры в строку запроса? Большое спасибо!

Кстати, я знаю, что мое соединение с БД в порядке. Пройдите простой запрос, там отлично работает.

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)

1 Ответ

0 голосов
/ 12 октября 2019

Попробуйте это (не запускать):

# 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)
...