RK *_*ala 7 sql-server etl functions azure-sql-data-warehouse
这里有没有人在Azure 数据仓库数据库上创建和使用 UDF 很幸运?我正在将本地仓库从 SQL Server 2014 迁移到 Azure 数据仓库,但遇到了 UDF 问题。
CREATE FUNCTION dbo.fn_GetImpliedRate (@Multiple float, @term int)
RETURNS float
AS
BEGIN
DECLARE @ImpInt float
IF(@Term = 1)
SET @ImpInt = (select [1] from dbo.ImpliedRate where Multiple = @Multiple);
IF(@Term = 2)
SET @ImpInt = (select [2] from dbo.ImpliedRate where Multiple = @Multiple);
IF(@Term = 3)
SET @ImpInt = (select [3] from dbo.ImpliedRate where Multiple = @Multiple);
IF(@Term = 4)
SET @ImpInt = (select [4] from dbo.ImpliedRate where Multiple = @Multiple);
RETURN @ImpInt
END;
GO
Run Code Online (Sandbox Code Playgroud)
此 UDF 在 SQL Server 2014 上完美运行。当我在 Azure 数据仓库上创建此 UDF 时,它已创建但在我查询时不起作用。它返回一个NULL. 我已经验证了明显的事情,比如目标表是否存在等。所有检查。我查看了 Azure 数据仓库的CREATE FUNCTION文档,它有一个示例 UDF 可以转换int为decimal. 这在 Azure DW 上可以完美运行。当我编写一个带有 的简单函数时select,它失败了。不幸的是,这里的 Azure 文档并不是很有帮助,我想知道你们中是否有人遇到过这个问题。如果是,你是如何解决的?
我刚刚测试了另一个用例,它也不起作用:
CREATE function [dbo].[fn_GetNumberBusinessDays]
(
@StartDate datetime,
@EndDate Datetime
)
returns int
as
begin
DECLARE @NDAYS INT = 0
SELECT @NDAYS =
ISNULL( (DATEDIFF(dd, @StartDate, @EndDate) + 1)
-(DATEDIFF(wk, @StartDate, @EndDate) * 2)
-(CASE WHEN DATENAME(dw, @StartDate) = 'Sunday' THEN 1 ELSE 0 END)
-(CASE WHEN DATENAME(dw, @EndDate) = 'Saturday' THEN 1 ELSE 0 END) - 1 ,0) + 1
SELECT @NDAYS = @NDAYS - COUNT(*)
FROM dbo.FedHolidays
WHERE DateOfHoliday BETWEEN @StartDate AND @EndDate
RETURN @NDAYS
end
GO
Run Code Online (Sandbox Code Playgroud)
小智 6
Azure DW 中的函数不支持像在您的用例中那样访问表的选择语句,请参阅CREATE FUNCTION(SQL 数据仓库):
function_body
指定一系列不引用数据库数据(表或视图)的 Transact-SQL 语句定义函数的值。
你能仔细检查一下这个函数是在 DW 中创建的吗?
| 归档时间: |
|
| 查看次数: |
5021 次 |
| 最近记录: |