如何将R DBI包连接到SQL Server?

时间:2017-02-10 18:28:57

标签: r r-dbi

我目前正在使用R中的RODBC包来运行针对SQL Server数据库的查询。 Knitr现在可以使用SQL code chunks(使用DBI package)。我想利用这个,因为它允许我在RMarkdown(RMD)文档中嵌入干净的SQL。但是,我在使DBI连接到我的SQL Server环境时遇到了麻烦。

我查看了DBI的帮助文件和小插曲,但我不知所措。他们为SQL Server提到RSQLServer,但它已从CRAN中提取。我知道我可以使用devtools从gitHub安装它,但我宁愿不依赖于无法在CRAN上保留的软件包。我也更喜欢避免使用RJDBC连接器,因为我听说过可靠性问题,而且它使代码的可移植性降低了。

虽然我的目标是在RMD文件中使用它,但下面的代码是一个简单的R脚本,以尽可能减少示例。

有谁知道如何使DBI示例以与RODBC示例类似的方式工作?

# *** Query - edit table name to work with your db
my_query = "select top 100 * from my_table"

# *** This code works ***
library(RODBC)
# Replace <<SERVER>> and <<DB>> with your server and database, respectively
SQLServer <- odbcDriverConnect(connection = "Driver={SQL Server};server=<<SERVER>>;database=<<DB>>;trusted_connection=yes")
sqlResult <- sqlQuery(SQLServer, my_query)


# *** This code doesn't ***
library(DBI)
# Replace <<SERVER>> and <<DB>> with your server and database, respectively
SQLServer <- dbConnect(dbDriver("ODBC"), "server=<<SERVER>>;database=<<DB>>;trusted_connection=yes")
sqlResult <- dbSendQuery(con, my_query)

1 个答案:

答案 0 :(得分:1)

您可以使用以下版本的Microsoft SQL Server JDBC驱动程序尝试rjdbc程序包:https://www.microsoft.com/en-us/download/details.aspx?id=21599

然后按照以下方式做点什么:

drv <- JDBC(driverClass = "com.microsoft.sqlserver.jdbc.SQLServerDriver",
            classPath = 'path/to/sqljdbc4.jar") 

con <- dbConnect(drv, 'jdbc:sqlserver:path/to/server;user=user;password=password;)