在Windows上创建ODBC连接时,如何在SQL Server中指定特定数据库?

时间:2016-06-20 21:39:08

标签: sql-server r database odbc

我正在处理包含各种SQL数据库(通过Microsoft SQL Server Management Studio访问)的服务器,并将使用R执行分析并探索服务器中的特定数据库。我有网络安全性,允许在R服务器上安装的计算机,驱动程序和RODBC之间进行通信。

当我尝试在ODBC中建立Windows Control panel>Administrative>Data Sources连接时,我只能为整个SQL服务器添加数据源,而不仅仅是针对特定数据库我想看看。我粘贴了下面我一直在试验的代码。

library(RODBC)
channel <- odbcConnect("Example", uid="xxx", pwd=****");
sqlTables(channel) 
sqlTables(ch, tableType = "TABLE") 
res <- sqlFetch(ch, "samp.le", max = 15) #not recognizing as a table

library(RODBC)
ch <- odbcDriverConnect('driver={"SQL Server"}; server=Example; database=dbasesample; uid="xxxx", pwd = "****"')

响应:警告消息:

1: In odbcDriverConnect("driver={\"SQL Server\"}; server=sample; database=dbasesample; uid=\"xxxx", pwd = \"xxxx\"") :
  [RODBC] ERROR: state IM002, code 0, message [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
2: In odbcDriverConnect("driver={\"SQL Server\"}; server=sample; database=dbasesample; uid=\"xxxx\", pwd = \"xxxx!\"") :
  ODBC connection failed

非常感谢对这个问题的任何见解。

1 个答案:

答案 0 :(得分:0)

尽管使用sqlQuery()函数进行查询时,您可以指定数据库,架构和表,例如

library(RODBC)
con = odbcConnect(dsn = 'local')    
sample_query = sqlQuery(con,'select * from db.dbo.table')

在使用sqlFetch()或sqlSave()时,我还没有找到从函数参数中定义数据库的方法。一种间接方法是在dsn中定义默认数据库(如注释中所述)。但是,对于每个要使用的数据库,您将需要一个不同的dsn。 更好的解决方案是使用odbc和DBI软件包代替RODBC,并在连接语句中定义数据库,例如

library(dplyr)
library(DBI)
library(odbc)

con <- dbConnect(dsn = 'local',database = 'db')
copy_to(con, rr2, temporary = F)

顺便说一句,我发现copy_to比RODBC的等效sqlSave快得多。