Microsoft SQL ServerへGAS(Google Apps Script)を用いてアクセスして、Select結果をスプレットシートへコピーしてくる一連の流れをまとめています。
GASを用いたSQL Serverへの接続方法
MicrosoftのSQL SeverへGASから接続したいなと思いまして、GASのリファレンス(JDBC)を調べてみるとGoogle Cloud SQL、MySQL、Microsoft SQL Server、Oracle databasesはサポートされているようでした。
ただ、SQLサーバーへの接続をしている、参考サイトが見つからなかったので試しにつないでみて、実際繋げましたよという報告です。
Microsoft SQL Sever接続のスクリプト
ということで、公式のリファレンスの転用になりますが、以下の通りで接続することができました。JDBCでSQL Serverとのコネクションを張って、データをSelectしています。その結果は、予め用意しておいたスプレットシートへコピーするようにしています。
データベース情報、クエリ、結果を出力するスプレットシートのIDは各自で設定するようにしてください。
function SQLdb() {
    function readFromTable() {
      
    // データベースへの接続情報を記載
    var user = '【ユーザ情報を指定】';
    var userPwd = '【パスワードを指定】';
    var database = '【データベース名を指定】';
    var host_name = '【ホスト名を指定】';
    var port = '【ポート名を指定】';
    
    var connectionString = 'jdbc:sqlserver://'+host_name+':'+port+';databaseName='+database;
    
    // JDBCでデータベースへのコネクション確立
    var conn = Jdbc.getConnection(connectionString , user, userPwd);
    
    // 処理の開始時間を取得
    var start = new Date();
  
    var stmt = conn.createStatement();
      
    // デバッグ用(レコードの最大取得件数を指定できます。)
    stmt.setMaxRows(5);
  
    // クエリの実行
    var results = stmt.executeQuery("SELECT 【...クエリを指定】");
    
    // カラムの数を取得
    var numCols = results.getMetaData().getColumnCount();
  
    // 以下、スプレットシートへの結果のコピー処理
    var sheet = SpreadsheetApp.openById('【結果出力先のシートidを指定】').getSheets()[0];
    var cell = sheet.getRange(1,1);
    var row =0;
    
    // データのヘッターを指定(フィールド名)
    var fields=["id","name","price"];
    for(var i=0;i<fields.length;i++){
      //value[i]=values[i];
      cell.offset(row, i).setValue(fields[i]);
      Logger.log(fields[i])
    }
    
    row++;
      
    // クエリの結果をコピー
    while (results.next()) {
      var rowString = '';
      for (var col = 0; col < numCols; col++) {
        rowString += results.getString(col + 1) + '\t';
        cell.offset(row, col).setValue(results.getString(col +1 ));
      }
      row++
    }
    
    results.close();
    stmt.close();
  
    // 終了時刻の取得と、実行時間のログ出力
    var end = new Date();
    Logger.log('Time elapsed: %sms', end - start);
      
   }
   readFromTable();
  }
(参考)スプレットシートへの出力結果
出力件数はstmt.setMaxRows(5)で5件に指定しているため、5つのレコードを取得することができました。
 
スクリプトで指定するスプレットシートのIDですが、スプレッドシートのURLの中の以下下線太文字部分となります。(下記では、IDの部分をダミー値にしています。)
https://docs.google.com/spreadsheets/d/1P8UmWe1397llBlC0-EcYiSs2ds_psCdhodJT4dtjIdk/edit#gid=0
ということで、GASを用いたMicrosoft SQL Serverへの接続方法の説明でした。スプレットシートを用いるとサーバレスなデータベースっぽく扱うこともできるので重宝しています。よかったら参考にしてみてください。
