我使用的是SQL Server 2008 R2和正尝试使用谷歌Apps脚本进行查询。 我使用的应该填写电子表格中建议的一个脚本,但我有问题,SQL连接。
我检查我指定的端口是正确的,所以我怀疑的问题是,我会很感激确认我的连接字符串是正确的。
下面的代码 -
服务器/实例:1433;的databaseName = 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()));
谢谢你的帮助!
我觉得你的连接字符串是稍有畸形。 我相信你需要一个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();
}
我在GitHub上的整个项目是一个MySQL和SQL Server的JDBC连接的应用程序。 你可以在这里找到: GitHub的项目 。 我已经发布了下面的相关代码。 将在SQL Server的情况是你实例参数为您的连接,然后下面是连接的其余部分。 为了得到一个完整的工具使用GitHub的项目。
function readFromTable(queryType, queryDb, query, tab, startCell) {
// Replace the variables in this block with real values.
var address;
var user;
var userPwd ;
var dbUrl;
switch(queryType) {
case 'sqlserver':
address = '%YOUR SQL HOSTNAME%';
user = '%YOUR USE%';
userPwd = '%YOUR PW%';
dbUrl = 'jdbc:sqlserver://' + address + ':1433;databaseName=' + queryDb;
break;
case 'mysql':
address = '%YOUR MYSQL HOSTNAME%';
user = '%YOUR USER';
userPwd = '%YOUR PW%';
dbUrl = 'jdbc:mysql://'+address + '/' + queryDb;
break;
}
var conn = Jdbc.getConnection(dbUrl, user, userPwd);
var start = new Date();
var stmt = conn.createStatement();
var results = stmt.executeQuery(query);
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var sheetTab = sheet.getSheetByName(tab);
var cell = sheetTab.getRange(startCell);
var numCols = results.getMetaData().getColumnCount();
var numRows = sheetTab.getLastRow();
var headers ;
var row =0;
clearRange(tab,startCell,numRows, numCols);
for(var i = 1; i <= numCols; i++){
headers = results.getMetaData().getColumnName(i);
cell.offset(row, i-1).setValue(headers);
}
while (results.next()) {
var rowString = '';
for (var col = 0; col < numCols; col++) {
rowString += results.getString(col + 1) + '\t';
cell.offset(row +1, col).setValue(results.getString(col +1 ));
}
row++
Logger.log(rowString)
}
results.close();
stmt.close();
var end = new Date();
Logger.log('Time elapsed: %sms', end - start);
}
我已经破解了:)......至少对于我们的SQL Server和谷歌电子表格!
感谢所有帮助。 我一直在阅读这里的一些问题,现在我想与大家分享你帮什么我建立。 我已经建立,可以采取一个SQL查询和输出结果以电子表格的函数中。
为了让电子表格上的数据,你需要打开一个电子表格谷歌去“工具”>“<>脚本编辑器”。 那么过去的代码波纹管与说明,并包括“/ **** ......”。 接下来,您将在代码更新这些位
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);
}