在 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
在常规 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