2011-07-26 24 views
3

在R中,如何將多行文本文件(包含SQL)的內容導入多行SQL?R:從文本文件中運行多行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爲好,但我的感覺是,當第三條語句跟在第二條語句後面時,問題就會發生。

任何人都可以幫我解決這個問題嗎?非常感謝。

+0

類似的問題被問到[這裏](http://stackoverflow.com/questions/4747768/rodbc-temporary-table-issue-when-connecting-to-ms-sql-server/4748281#4748281),可能對你感興趣。 – Chase

回答

3

有兩種分離SQL命令的方法。您可以將它們分開發送。這是通過在for循環中執行文件的每一行就可以得到的結果,但是當然如果一個命令需要多行,那麼你該怎麼辦?分離SQL命令的第二種方法是簡單地用a;結束它們。如果你把它放在每個命令的末尾,你應該可以在單個字符串中儘可能多地傳遞給DB。

+0

Nicloas,非常感謝您的快速響應。用分號上傳所有行。唯一的問題仍然是sqlQuery返回第一個結果集(將一行數據添加到臨時表 - 這是空的)而不是select語句(應該返回中國/ EM)。 有沒有辦法從上傳的字符串中獲取最後的結果集?謝謝。 – Tim

+0

不知道,看起來很具體實現。我想我只是單獨發送最後一個查詢。這可能看起來像冗餘代碼,但實際上並非如此。您將建築物和查詢代碼分開並明確表示。無論這第二個查詢是一個額外的文件,一個硬編碼的查詢還是隻是最後一行,請選擇適合您的方案的內容。任何會閱讀你的代碼的人(包括未來的你)都會很高興看到你想要的結果,而不必懷疑「哪些查詢產生了結果」? – Nicolas78

+0

「許多疑問中的哪一個......」應該在最後一句中) – Nicolas78