在 Azure SQL 数据仓库中是否有返回 Table 类型的函数的替代方法?

Is there an alternative to a function returning Table type in Azure SQL Data Warehouse?

在常规 SQL 服务器数据库中,我有一个返回 table 类型的函数:

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

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

谁能告诉我我可以做什么而不是返回一个 table 类型的函数?

你是对的,table 类型不受支持。

您可以使用 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 实现为单独的查询,以便我可以控制其结构和分布。

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

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