【问题标题】:Is there an alternative to a function returning Table type in Azure SQL Data Warehouse?Azure SQL 数据仓库中返回表类型的函数是否有替代方法?
【发布时间】:2019-05-07 00:25:55
【问题描述】:

在常规 SQL Server 数据库中,我有一个返回表类型的函数:

CREATE FUNCTION [dbo].[GetSomeStuff] 
(   
    @UserID INT
)
RETURNS TABLE 
AS
RETURN 
(...

函数从各种存储过程中调用。我想将存储过程与此函数一起迁移到 Azure SQL 数据仓库,但不支持 TABLE 类型。

谁能告诉我我能做什么来代替这里返回表类型的函数?

【问题讨论】:

  • 我可能遗漏了一些东西,但不是使用 A TABLE 类型吗?在这种情况下,Azure 数据仓库不支持它。顺便说一句,CTE 也不是 AFAIK。

标签: azure-sqldw


【解决方案1】:

你是对的,不支持表格类型。

您可以使用 CTE,这是一个在我的 DW 上运行的简单查询:

with ProductSales as (
    select ProductID,
           sum(OrderQty) as UnitsSold 
    from SalesLT.SalesOrderDetail 
    group by ProductID
    ) 
select * 
from ProductSales 
order by UnitsSold desc;

也就是说,我经常发现 CTE 在复杂查询中的表现非常糟糕,并且更喜欢将 CTE 作为单独的查询具体化,以便我可以控制其结构和分布。

我认为物化是解决您问题的正确答案。考虑使用在存储过程中创建的临时表来替换您的函数调用。 ASDW 临时表是会话范围的,并保留在创建它们的过程之外。

https://docs.microsoft.com/en-us/azure/sql-data-warehouse/sql-data-warehouse-tables-temporary

【讨论】:

  • 感谢您的回复,实际上商店 proc 中的临时表是我所追求的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-11
  • 2016-05-07
  • 1970-01-01
  • 1970-01-01
  • 2016-06-30
  • 1970-01-01
相关资源
最近更新 更多