【问题标题】:SQL Data Warehouse - unale to create table-valued functionsSQL 数据仓库 - 无法创建表值函数
【发布时间】:2016-11-21 10:30:48
【问题描述】:

背景:

我正在将 SQL Server 数据仓库迁移到 Azure SQL 数据仓库。数据库是 SSAS OLAP 多维数据集的源。

一些度量值组已被分区,并依赖表值函数来查询分区的相关数据。

问题:

我无法在 Azure-DWH 中创建这些函数。

示例函数: create function udm.MyFunction() 以表的形式返回(select getdate(), getutcdate())

错误信息: 消息 104051,第 16 层,状态 1,第 46 行 不支持的数据类型错误。语句引用了并行数据仓库中不支持的数据类型,或者存在产生不受支持的数据类型的表达式。修改语句并重新执行。

MSDN 链接:https://msdn.microsoft.com/en-US/library/mt203952.aspx 列出“return_data_type”并提到“是用户定义的标量函数的返回值。对于 Transact-SQL 函数,允许 SQL 数据仓库中支持的所有标量数据类型。时间戳(行版本)数据类型不是受支持的类型。”

我的假设是 TABLE 返回类型是错误,因为我已经能够创建返回单个值的函数。

我不确定是否支持表值函数,如果支持,我需要做些什么才能让它们正常工作。

【问题讨论】:

  • 如果多维数据集是多维的,那么我明白你为什么使用函数了。如果它是表格,那么您应该能够使用存储过程。是哪个?
  • 它是多维的,并且是托管在 Azure VM 中的 SQL Server 2016。

标签: azure-sqldw


【解决方案1】:

Azure SQL 数据仓库当前不支持内联或多语句表值函数。此时只有标量函数。与 SQL Server 相比,还有一个额外的限制。标量函数体不能引用表。详情请参考函数体部分:

function_body (msdn)

指定一系列不引用数据库数据(表或视图)的 Transact-SQL 语句定义函数的值。

根据您的情况,您需要使用替代方法;带有一些额外元数据或显式查询的 proc。

【讨论】:

    【解决方案2】:

    正如 JRJ 所说,非标量类型,游标和表,是不允许的。我们将更新 out docs 以明确调用它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-28
      • 1970-01-01
      • 2020-07-03
      • 1970-01-01
      • 2016-02-10
      • 2022-11-02
      • 2017-11-02
      相关资源
      最近更新 更多