Параметризованный запрос на PostgreSQL vs SQL сервере - PullRequest
0 голосов
/ 02 мая 2020

В одном из моих проектов R я использую следующий код для вставки некоторой пользовательской информации в базу данных PostgreSQL, но теперь я бы хотел переключить ее на сервер SQL. К сожалению, это не удается.

library(DBI)
conn <- #database connection
# data$data is a list 
    dbExecute(
              conn,
              "INSERT INTO users (user_uuid, user_firstname, user_lastname, user_email, 
              user_role, owner_uuid, user_password, flag_user_active) VALUES ($1, $3, $4, $5, $6, $7, $2, TRUE)",
              params = c(
                list(user_uuid),
                list(user_password_encrypted),
                unname(data$data)
              )
            )

У меня такое ощущение, что сервер SQL обрабатывает параметризованные запросы, отличные от PostgreSQL, но, к сожалению, я не смог найти четкого ответа о том, как его изменить, чтобы он работал хорошо. Я надеюсь, что у кого-то есть этот ответ, легко доступный. Спасибо!

1 Ответ

0 голосов
/ 04 мая 2020

Приведенный ниже код работает с SQL сервером, но он не так хорош, как код в вопросе, который работает для PostgreSQL. Основным недостатком является то, что вы не можете ссылаться на переменные в VALUES так же, как в PostgreSQL.

library(DBI)
conn <- #database connection
# data$data is a list 
    dbExecute(
              conn,
              "INSERT INTO users (user_uuid, user_firstname, user_lastname, user_email, 
              user_role, owner_uuid, user_password, flag_user_active) VALUES (?, ?, ?, ?, ?, ?)",
              params = c(
                list(user_uuid),
                list(user_password_encrypted),
                unname(data$data)
              )
            )

Обратите внимание, что порядок параметров должен совпадать с порядком в операторе INSERT.

...