我试过readLines
和read.csv
函数,但不起作用。
下面是my_script.sql
文件的内容:
SELECT EmployeeID, FirstName, LastName, HireDate, City FROM Employees
WHERE HireDate >= '1-july-1993'
字符串
它保存在我的桌面上。
现在我想从我的R脚本运行这个查询。这是我的:
conn = connectDb()
fileName <- "C:\\Users\\me\\Desktop\\my_script.sql"
query <- readChar(fileName, file.info(fileName)$size)
query <- gsub("\r", " ", query)
query <- gsub("\n", " ", query)
query <- gsub("", " ", query)
recordSet <- dbSendQuery(conn, query)
rate <- fetch(recordSet, n = -1)
print(rate)
disconnectDb(conn)
型
在这个案子里我什么都得不到。我能尝试什么?
6条答案
按热度按时间ezykj2lf1#
我自己在阅读sql文件时遇到了麻烦,并且发现如果sql中有任何单行注解,语法经常会被破坏。因为在R中,你将sql语句存储为单行字符串,如果sql中有任何双破折号,它将基本上注解掉双破折号后面的任何代码。
这是一个函数,我通常在阅读R中使用的.sql文件时使用。
字符串
roqulrg32#
我发现对于多行查询,readr包中的
read_file()
函数运行良好。你唯一需要注意的是避免单引号(双引号是可以的)。您甚至可以通过这种方式添加评论。示例查询,保存为
query.sql
字符串
然后,我可以将结果存储在数据框中
型
8fq7wneg3#
您可以使用
readr
包中的read_file()
函数。字符串
您将获得一个字符串变量
fileName
,其中包含所需的文本。**注意:**使用
/
,而不是\\\
jogvjijk4#
answer by Matt Jewett非常有用,但我想补充的是,当我试图读取sql server使用该答案生成的.sql文件时,有时会遇到以下警告:
警告消息:在readLines(con,n = 1)中:行1似乎包含嵌入的nul
在这些情况下,
readLines
返回的第一行通常是“*”(即UTF-16字节顺序标记)和后续行不能正确读取。我通过在 Microsoft SQL Server Management Studio 中打开sql文件并选择文件->保存为...
然后在保存按钮旁边的小向下箭头上选择
编码保存...
选择
Unicode(UTF-8无签名)-代码页65001
从“编码”下拉菜单中。
如果您没有 * Microsoft SQL Server Management Studio*,并且使用的是Windows计算机,您也可以尝试使用默认文本编辑器打开文件,然后选择
文件->保存为...
编码:UTF-8
保存为.txt文件扩展名。
有趣的是,在***Microsoft SQL Server Management Studio***中更改文件会完全删除BOM(字节顺序标记),而在文本编辑器中更改文件会将BOM转换为UTF-8 BOM,但仍然会使用引用的答案正确读取查询。
wixjitnu5#
readr
和textclean
的组合可以很好地工作,而不必创建任何新函数。read_file()
将文件读入字符向量,replace_white()
确保从.sql
文件中删除所有转义序列字符。Note: Does cause problems if you have comments in your SQL string !!
个字符串
ndasle7k6#
虽然有点晚了,但我今天一直在玩这个游戏,并编写了一种稍微不同的方法来收集SQL代码,以便在
DBI::dbGetQuery()
函数中运行:字符串
这种方法与公认的答案不同,因为它从文件中删除了单行和多行注解。