Ошибка функции dbBind при попытке настроить параметризованный запрос на SQL Server

#r #r-dbi

#r #r-dbi

Вопрос:

Я пытаюсь выполнить некоторые параметризованные запросы, используя DBI пакет dbSendQuery dbBind и dbFetch рабочий процесс.

Я могу использовать dbSendQuery using ? в качестве заполнителя для переменной. однако при запуске dbBind я получаю следующую ошибку:

 Error in (function (classes, fdef, mtable)  :
unable to find an inherited method for function 'dbBind' for signature '"Microsoft SQL Server"'
  

Весь мой код выглядит так:

 library(odbc)
library(DBI)
test_connection <- DBI::dbConnect(odbc::odbc(),
                                  Driver = "SQL Server",
                                  Server = "MyServer",
                                  Database = "MyDataBase")
test_query <- dbSendQuery(test_connection,
                          "SELECT TOP 2 col1, col2 FROM MyTable WHERE col2 = ?")
dbBind(test_connection,
       list('value'))

Error in (function (classes, fdef, mtable)  :
            unable to find an inherited method for function 'dbBind' for signature '"Microsoft SQL Server"'
  

Кто-нибудь может объяснить мне причину этой ошибки?

Если я жестко прописываю value в dbSendQuery инструкции и использую dbFetch запрос, он работает.

Ответ №1:

Вместо dbBind объекта подключения следует использовать объект запроса. В вашем примере:

 dbBind(test_query, list('value'))
  

Комментарии:

1. Спасибо, я увидел это решение и подумал: «Очевидно, я не совершал эту ошибку, должно быть, это была опечатка» — оказывается, я сделал. Спасибо, что нашли это в архиве.