通过远程桌面从Microsoft SQL数据库中读取数据。 [R

时间:2013-12-01 08:30:41

标签: sql sql-server r odbc rodbc

我的数据加载到使用Microsoft Windows Server 2012的远程桌面上的Micorsoft SQL服务器上。我想通过R访问数据。我知道可以通过RODBC使用

odbcConnect(dsn, uid="", pwd="")

但我对在dsn上输入的内容感到困惑。

1 个答案:

答案 0 :(得分:4)

这取决于您是否要使用ODBC DSN或无DSN连接字符串,身份验证类型和驱动程序。

以下是使用域身份验证和SQL Server驱动程序的无DSN连接字符串示例:

odbcDriverConnect(connection="server=MYDB.mynet.tld;database=mydb_prod;trusted_connection=true;Port=1433;driver={SQL Server};TDS_Version=7.0;")

这是另一个例子,使用SQL身份验证和FreeTDS驱动程序(例如在Mac或Linux上)

odbcDriverConnect(connection="server=MYDB.mynet.tld;database=mydb_prod;uid=myuser;pwd=mypass;Port=1433;driver=FreeTDS;TDS_Version=7.0;")

有关“连接”元素的更多示例,请参阅http://www.connectionstrings.com/sql-server/

这是我用来以跨平台方式打开连接的函数:

require(RODBC)

connect <- function(host, db, user=NULL, pass=NULL, platform="win" ){

  # TODO: Check input paramaters and add a branch for SQL auth on windows

  if(platform == "win")
  {
    c <- odbcDriverConnect(connection=paste0("server=",host,
                                             ";database=",db,
                                             ";trusted_connection=true;Port=1433;driver={SQL Server};TDS_Version=7.0;"))

    if(class(c) == 'RODBC') 
    {  
      writeLines("Successfilly opened connection to db")
      return(c)
    } 
    else
    {
      writeLines(paste0("Error opening connection: ", as.character(c)))
    }
  }  

  if(platform == "mac")
  {
    c <- odbcDriverConnect(connection=paste0("server=",host,
                                             ";database=",db,
                                             ";uid=",user,
                                             ";pwd=",pass,
                                             ";Port=1433;driver=FreeTDS;TDS_Version=7.0;"))

    if(class(c) == 'RODBC') 
    {  
      writeLines("Successfilly opened connection to db")
      return(c)
    } 
    else
    {
      writeLines(paste0("Error opening connection: ", as.character(c)))
    }
  }  
}