通过 RODBC 通过 RStudio 运行 SQL 查询:如何处理哈希表?

Posted

技术标签:

【中文标题】通过 RODBC 通过 RStudio 运行 SQL 查询:如何处理哈希表?【英文标题】:Running SQL query through RStudio via RODBC: How do I deal with Hash Tables? 【发布时间】:2013-08-22 08:47:12 【问题描述】:

我有一个非常基本的 SQL 查询,希望能够在 R 中查看。

问题是,我需要能够引用#table:

    select
    RAND(1) as random
    into #test

    select * from #test

这可能吗,还是我需要创建永久表,或寻找其他解决方法?

我目前通过 RODBC 脚本执行此操作,该脚本允许我选择要运行的 SQL 文件:

    require(RODBC)
    sql.filename <- choose.files('T:\\*.*')
    sqlconn <- odbcDriverConnect("driver=SQL Server;Server=SERVER_NAME;Trusted_Connection=True;")
    file.content <- readLines(sql.filename)
    output <- sqlQuery(sqlconn, paste(file.content[file.content!='--'],collapse=' '))
    closeAllConnections()

您对如何在 R 中的 SQL 脚本中使用 #tables 有什么建议吗?

提前致谢!

【问题讨论】:

您不应该将 SQL 查询作为字符串传递吗? (x &lt;- "#tralala"). 粘贴函数创建字符串。你会怎么做呢? paste("#", "tralala", sep = "")。你的“tralala”也可以是一个变量。请参阅?pastehelp(paste) 您能否更具体地说明什么不起作用?您是否尝试过一次运行一个 sql 命令? 我认为粘贴只是将sql查询中的所有行放在一起......在用readLines读入之后...... 【参考方案1】:

当您使用临时表时,SQL 会输出一条包含表中行数的消息。 R 不知道如何处理此消息。如果您以 SET NOCOUNT ON 开始 SQL 查询,SQL 将不会输出计数消息。

【讨论】:

【参考方案2】:

我通过将查询分成两部分来使用#tables,如果我愿意,它会返回字符(0):

sqlQuery(test_conn, paste("
drop table #test;
select
       RAND(1) as random
     into #test

select * from #test
"))

所以我会使用:

sqlQuery(test_conn, paste("
drop table #test;
select
       RAND(1) as random
    into #test
"))

sqlQuery(test_conn,"select * from #test")

如果您发送一个查询来创建#table,然后再发送一个来检索内容,这似乎工作正常。我还添加了删除表#test;对于我的查询,这确保没有#test。如果您尝试写入已经存在的#table 名称,您将收到错误

【讨论】:

以上是关于通过 RODBC 通过 RStudio 运行 SQL 查询:如何处理哈希表?的主要内容,如果未能解决你的问题,请参考以下文章

R - 使用 RODBC 库连接字符串和变量

没有名为rodbc的包[关闭]

RODBC sqlSave 崩溃 R 前端

在 RStudio 中查询 Oracle DNS

缺少 RODBC 1.3-16

运行 randomForestSRC 后 RODBC 失去连接