LoginSignup
12
15

More than 3 years have passed since last update.

Google Apps Scriptを用いたSQL Serverへの接続方法【取得レコードをスプレットシートへコピー】

Last updated at Posted at 2020-03-27

Microsoft SQL ServerへGAS(Google Apps Script)を用いてアクセスして、Select結果をスプレットシートへコピーしてくる一連の流れをまとめています。

GASを用いたSQL Serverへの接続方法

MicrosoftのSQL SeverへGASから接続したいなと思いまして、GASのリファレンス(JDBC)を調べてみるとGoogle Cloud SQLMySQLMicrosoft SQL ServerOracle databasesはサポートされているようでした。

ただ、SQLサーバーへの接続をしている、参考サイトが見つからなかったので試しにつないでみて、実際繋げましたよという報告です。

Microsoft SQL Sever接続のスクリプト

ということで、公式のリファレンスの転用になりますが、以下の通りで接続することができました。JDBCでSQL Serverとのコネクションを張って、データをSelectしています。その結果は、予め用意しておいたスプレットシートへコピーするようにしています。

データベース情報クエリ結果を出力するスプレットシートのIDは各自で設定するようにしてください。

script.js
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つのレコードを取得することができました。

Screen-Shot-2019-12-08-at-17.44.07.png

スクリプトで指定するスプレットシートのIDですが、スプレッドシートのURLの中の以下下線太文字部分となります。(下記では、IDの部分をダミー値にしています。)

https://docs.google.com/spreadsheets/d/1P8UmWe1397llBlC0-EcYiSs2ds_psCdhodJT4dtjIdk/edit#gid=0


ということで、GASを用いたMicrosoft SQL Serverへの接続方法の説明でした。スプレットシートを用いるとサーバレスなデータベースっぽく扱うこともできるので重宝しています。よかったら参考にしてみてください。

12
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
15