2011-07-26 6 views
3

Rでは、SQLを含む複数行のテキストファイルの内容を複数行のSQLにインポートするにはどうすればよいですか?R:テキストファイルから複数行sqlを実行

私はImport multiline SQL query to single stringを学び、シンプルなSQLスクリプトの動作を管理しました。しかし、SQLが新しい行を要求すると(つまり、SELECT文を追加すると)、SQL文のすべての行を1行に入れると機能しません。

ファイルは次のようになり.TXT SQL:Rコードのように見える

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

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

私もCATとGSUBを試してみたが、私は感じているんです3行目が1行目の2行目に続くときに問題が発生します。

誰でもこの問題を解決できますか?どうもありがとう。

+0

同様の質問がありました[こちら](http://stackoverflow.com/questions/4747768/rodbc-temporary-table-issue-when-connecting-to-ms-sql-server/4748281#4748281)あなたに興味があります。 – Chase

答えて

3

SQLコマンドを区切るには2通りの方法があります。あなたはそれらを別々に送ってください。これはforループでファイルの各行を実行するだけで得ることができますが、1つのコマンドに複数の行が必要な場合にはどうすればよいのでしょうか? SQLコマンドを分離する2番目の方法は、単にそれらを終了することです。それを各コマンドの最後に置くと、好きなだけ多くのものを単一の文字列でDBに渡すことができます。

+0

ニコラス、あなたの迅速な対応に多くの感謝をします。セミコロンですべての行をアップロードする。唯一の問題は、sqlQueryがselect文(中国/ EMを返すはずではありません)ではなく、最初の結果セットを返すことです。 アップロードされた文字列から最後の結果セットを取得する方法はありますか?ありがとう。 – Tim

+0

いいえ、考え方は非常に実装固有のようです。私はちょうど最後のクエリを別々に送るだろうと思う。これは冗長コードのように見えるかもしれませんが、実際はそうではありません。ビルディングとクエリコードを分けて、明示的にします。この2番目のクエリが余分なファイルであっても、ハードコードされたクエリであっても、常に最後の行であっても、シナリオに合ったものを選んでください。あなたのコードを読む人(将来を含む)は、「どのような多くのクエリが結果を作成するのか」を意識することなく、どんな結果が得られるのかを知ることができます。 – Nicolas78

+0

"多くの質問のうちのどれが..."それは最後の文にあるはずです;) – Nicolas78

関連する問題