我正在处理包含各种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
非常感谢对这个问题的任何见解。
答案 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快得多。