【问题标题】:Running SQL query through RStudio via RODBC: How do I deal with Hash Tables?通过 RODBC 通过 RStudio 运行 SQL 查询:如何处理哈希表?
【发布时间】: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读入之后......

标签: sql r hashtable rodbc


【解决方案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 名称,您将收到错误

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-19
      • 1970-01-01
      • 2021-11-12
      • 1970-01-01
      • 1970-01-01
      • 2015-02-15
      • 2010-11-26
      • 1970-01-01
      相关资源
      最近更新 更多