通过 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 <- "#tralala")
.
粘贴函数创建字符串。你会怎么做呢?
paste("#", "tralala", sep = "")
。你的“tralala”也可以是一个变量。请参阅?paste
或help(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 查询:如何处理哈希表?的主要内容,如果未能解决你的问题,请参考以下文章