R:从文本文件运行多行 sql

Posted

技术标签:

【中文标题】R:从文本文件运行多行 sql【英文标题】:R: run multiple line sql from text file 【发布时间】:2011-07-26 11:04:45 【问题描述】:

在R中,如何将多行文本文件(包含SQL)的内容导入多行SQL?

我研究了Import multiline SQL query to single string 并设法让一个简单的 sql 脚本工作。但是,当 SQL 需要一个新行时(即当您添加一个 SELECT 语句时),当您将所有 sql 脚本行放在一行中时,它就不起作用了。

sql .txt 文件如下所示:

CREATE TABLE #Countries (Country varchar(255), Region varchar(255)) 
INSERT INTO #Countries  VALUES ('China', 'EM') 
SELECT * FROM #Countries

R 代码如下:

fileconn<-file("R/sql.txt","r")            
sqlString<-readLines(fileconn)           
sqlString<-paste(sqlString,collapse="","") 
sqlconn <- odbcDriverConnect(connection = ....)
sqlQuery(sqlconn,sqlString)

我也尝试过 CAT 和 GSUB,但我感觉当第三个语句在一行中的第二个语句之后出现问题。

谁能帮我解决这个问题?非常感谢。

【问题讨论】:

有人向here 提出了您可能感兴趣的类似问题。 【参考方案1】:

有两种分隔 SQL 命令的方法。要么你分开寄。这就是通过在 for 循环中执行文件的每一行得到的结果,但是如果单个命令确实需要多行,那么你当然会遇到问题,对吧?分隔 SQL 命令的第二种方法是简单地以 ; 结束它们。如果你把它放在每个命令的末尾,你应该能够将任意数量的它们传递给单个字符串中的数据库。

【讨论】:

Nicloas,非常感谢您的快速回复。使用分号上传所有行。唯一的问题仍然是 sqlQuery 返回第一个结果集(将一行数据添加到临时表 - 这是空的)而不是 select 语句(应该返回 China/EM)。有没有办法从上传的字符串中获取最后一个结果集?谢谢。 不知道,似乎非常特定于实现。我想我会单独发送最后一个查询。这似乎是多余的代码,但实际上并非如此。您将构建代码和查询代码分开并使其明确。无论第二个查询是额外的文件、硬编码的查询,还是总是最后一行,请选择适合您的方案。任何会阅读您的代码的人(包括未来的您)都会很高兴看到您想要的结果,而不必怀疑“哪些查询会产生结果”? “众多查询中的哪一个...”应该在最后一句中;)

以上是关于R:从文本文件运行多行 sql的主要内容,如果未能解决你的问题,请参考以下文章

C 语言文件操作 ( 读文本文件 | 文本加密解密 )

Oracle SQL:从大型文本文件运行插入语句

从多个文件中删除多行文本

将控件值(多行文本框、NumericUpDowns、复选框)保存到文件/从文件中加载

BigQuery 中的标准 SQL - 从多行获取连接文本

在 R 中使用 renderText() 输出多行文本