【问题标题】:Select field descriptions over JDBC in Google Apps Script在 Google Apps 脚本中通过 JDBC 选择字段描述
【发布时间】:2017-05-09 10:57:50
【问题描述】:

我正在尝试选择数据库中的所有表字段并获取它们的描述。这可以实现如下所示:SQL Server: Extract Table Meta-Data (description, fields and their data types)

该代码在 SSMS 中运行良好,但在 Google Apps 脚本中使用时会出错,返回:

不支持“变体”数据类型。 (第 31 行,文件“代码”)

我怎样才能让这段代码正确执行?谢谢。

【问题讨论】:

  • 您是否尝试在查询中使用 " 和 + 而不是 \?例如:"SELECT u.name + '.' + t.name AS [table]," + "td.value AS [table_desc]," + ... 不确定,只是想帮忙。
  • 不幸的是,这不起作用。请参阅我的帖子中的编辑。
  • 也许通过将列转换为 varchar ?看到这个SO question
  • 成功了,谢谢!

标签: sql-server jdbc google-apps-script metadata


【解决方案1】:

多亏了 Pierre-Marie Richard,它终于成功了。代码如下:

function getFieldList() {

  var conn = Jdbc.getConnection(connParams);
  var stmt = conn.createStatement();

  var results = stmt.executeQuery("SELECT     CAST(t.name AS NVARCHAR(128)) AS [table], \
                                              CAST(td.value AS NVARCHAR(128)) AS [table_desc], \
                                              CAST(c.name AS NVARCHAR(128)) AS [column], \
                                              CAST(cd.value AS NVARCHAR(128)) AS [column_desc] \
                                  FROM        sysobjects t \
                                  INNER JOIN  sysusers u \
                                      ON      u.uid = t.uid \
                                  LEFT OUTER JOIN sys.extended_properties td \
                                      ON      td.major_id = t.id \
                                      AND     td.minor_id = 0 \
                                      AND     td.name = 'MS_Description' \
                                  INNER JOIN  syscolumns c \
                                      ON      c.id = t.id \
                                  LEFT OUTER JOIN sys.extended_properties cd \
                                      ON      cd.major_id = c.id \
                                      AND     cd.minor_id = c.colid \
                                      AND     cd.name = 'MS_Description' \
                                  WHERE t.type = 'u' \
                                  ORDER BY    t.name, c.colorder");   

  var numCols = results.getMetaData().getColumnCount();

  var dataArray = [];

  while (results.next()) {
    var rowArray = [];
    for (var col = 0; col < numCols; col++) {
      rowArray.push(results.getString(col + 1));
    }
    dataArray.push(rowArray);
  }

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

  Logger.log(dataArray);

  return(dataArray);
}

【讨论】:

  • 不要忘记将您的答案设置为已接受,这样遇到相同问题的人可以寻找解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-21
  • 2022-01-05
  • 1970-01-01
  • 2021-03-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多