RからSQL Serverに接続する方法を試行錯誤していた.今回その方法を見つけたので備忘録として公開する.
SQL Server側の準備
SQLServerManage15.mscでの処理
検索タブにSQLServerManager15.mscとタイプすると下図のようにSQLServer構成マネージャが出現するのでクリックして起動する.
「SQL Serverネットワークの構成」で名前付きパイプとTCP/IPを有効化する.その後SQL Serverを再起動する.
「SQL Serverのサービス」で初期状態では停止しているSQL Server Browserを開始する.
Rでの処理
接続文字列の生成
下記コードを実行する.
> library(RODBC) > db = function(){ driver='{SQL Server}' server = 'SERVER_NAME' database = 'HeatStrokeDB' trusted_connection = 'yes' conn=paste('DRIVER=',driver,';SERVER=',server,';DATABASE=',database,';Trusted_Connection=',trusted_connection,';',sep="") cnxn = odbcDriverConnect(conn) return(cnxn) }
接続の実際
上記で定義したユーザー定義関数を実行し,結果をconnに格納する.サーバーにログインできない,データベースに到達できない場合などは下記コードがエラーで失敗する.
> conn=db()
クエリ
クエリを組み立て,実行する.
> sqlText="SELECT * FROM T_HeatStroke" > dat=sqlQuery(conn, sqlText)
データフレームdatにクエリの結果が格納された.最初の6件だけ抽出してみる.
> head(dat) 日付 都道府県コード 搬送人員(計) 年齢区分:新生児 1 2014-08-08 19 3 0 2 2014-08-08 20 1 0 3 2014-08-08 21 4 0 4 2014-08-08 22 10 0 5 2014-08-08 23 19 0 6 2014-08-08 24 1 0 年齢区分:乳幼児 年齢区分:少年 年齢区分:成人 年齢区分:高齢者 1 0 0 1 2 2 0 0 0 1 3 0 0 1 3 4 2 2 0 6 5 0 5 5 9 6 0 0 1 0 年齢区分:不明 傷病程度:死亡 傷病程度:重症 傷病程度:中等症 1 0 0 0 3 2 0 0 0 1 3 0 0 0 1 4 0 0 0 1 5 0 0 0 5 6 0 0 0 0 傷病程度:軽症 傷病程度:その他 1 0 0 2 0 0 3 3 0 4 9 0 5 14 0 6 1 0
切断
接続を切断するには下記コードを実行する.
> odbcCloseAll()
まとめ
RからSQL Serverに接続する手順を示した.R側ではほとんどすることがなく,SQL Server側の準備が必要だった.