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側の準備が必要だった.
