2

SQL Server 2008 R2 を使用しており、Google Apps Script を使用してクエリを実行しようとしています。スプレッドシートに入力することになっている推奨スクリプトの 1 つを使用していますが、SQL との接続に問題があります。

指定したポートが正しいことを確認したので、接続文字列が正しいことを確認していただければ幸いです。

ここにコードがあります -

サーバー/インスタンス:1433;データベース名=xxxx;ユーザー=xxxx;パスワード=xxxx");

function foo() {
  var conn = Jdbc.getConnection   ("jdbc:sqlserver/instance:1433;databaseName=xxxx;user=xxxx;password=xxxx");
  var stmt = conn.createStatement();
  stmt.setMaxRows(100);
  var start = new Date();
  var rs = stmt.executeQuery("select top 1000 from SOP10100");

  var doc = SpreadsheetApp.getActiveSpreadsheet();
  var cell = doc.getRange('a1');
  var row = 0;
  while(rs.next()) {
    cell.offset(row, 0).setValue(rs.getString(1));
    cell.offset(row, 1).setValue(rs.getString(2));
    cell.offset(row, 2).setValue(rs.getString(3));
    cell.offset(row, 3).setValue(rs.getString(4));
    row++;
  }
  rs.close();
  stmt.close();
  conn.close();
  var end = new Date();
  Logger.log("time took: " + (end.getTime() - start.getTime()));

ご協力いただきありがとうございます!

4

3 に答える 3

2

接続文字列の形式が少し間違っていると思います。sqlserver://サーバー名/インスタンスの前に が必要だと思います。

便利な SQL Server インスタンスはありませんが、SQL Azure に対して次のコードをテストしたところ、うまく機能しました。helloworld というテーブルからデータを選択して、スプレッドシートに書き込むことができました。

資格情報をプレースホルダーに置き換えました。

function readAzure() {
  var conn = Jdbc.getConnection("jdbc:sqlserver://XYZ.database.windows.net:1433;databaseName=MYDATABSENAME","USERNAME","PASSWORD");
  var stmt = conn.createStatement();
  var rs = stmt.executeQuery("select * from helloworld");

  var doc = SpreadsheetApp.create('azure');
  var cell = doc.getRange('a1');
  var row = 0;
  while(rs.next()) {
    cell.offset(row, 0).setValue(rs.getString(1));
    cell.offset(row, 1).setValue(rs.getString(2));
    row++;
  }
  rs.close();
  stmt.close();
  conn.close();
}
于 2013-03-19T14:53:58.010 に答える
1

私はそれをクラックしました:)...少なくともSQL ServerとGoogleスプレッドシートについては!

すべての助けをありがとう。私はここでいくつかの問題を読んでおり、あなたが私が構築するのを手伝ってくれたものを共有したいと思います. SQLクエリを受け取り、その結果をスプレッドシートに出力できる関数を作成しました。

スプレッドシートのデータを取得するには、Google スプレッドシートを開き、[ツール] > [<> スクリプト エディター] に移動する必要があります。次に、"/****....." を含む以下のコードを通過します。次に、コード内のこれらのビットを更新する必要があります

var address = 'yourServerUrl:yourPortNumber';
var user = 'yourUserName';
var userPwd = 'yourPassword';
var db = 'yourDatabaseName';

次に、それを保存し、スプレッドシートに戻って入力する必要があります

=SQLTOGOOGLOOGLESPREADSHEET("yourSqlQuery")

スプレッドシートのセルに

/***********************

@CUSTOMFUNCTION

*/

function SQLTOGOOGLOOGLESPREADSHEET(sqlQuery) {
    var address = 'yourServerUrl:yourPortNumber';
    var user = 'yourUserName';
    var userPwd = 'yourPassword';
    var db = 'yourDatabaseName';
    var msSqlUrlSyntax ='jdbc:sqlserver://'

    var dbUrl = msSqlUrlSyntax + address + ';databaseName=' + db;

    // msSqlUrlSyntax = 'youOptionalTestingQuery'
    var conn = Jdbc.getConnection(dbUrl, user, userPwd);

    var start = new Date();
    var stmt = conn.createStatement();
    stmt.setMaxRows(1000);

    var results = stmt.executeQuery(sqlQuery);
    var numCols = results.getMetaData().getColumnCount();
    var numRows = results.getFetchSize()
    Logger.log(numRows)
    var dataArray = [];

    while (results.next()) {
        var rowString = [];   
        rowString = [];

        for (var col = 0; col < numCols; col++)     
        {
            rowString.push(results.getString(col + 1))
        }

        dataArray[dataArray.length]=rowString;
    }

    Logger.log("dataArray =" + dataArray)
    return dataArray

    results.close();
    stmt.close();

    var end = new Date();
    Logger.log('Time elapsed: %sms', end - start);
}
于 2018-03-18T11:10:10.703 に答える