Bất cứ ai ở đây đều có may mắn với việc tạo và sử dụng UDF trên cơ sở dữ liệu kho dữ liệu Azure ? Tôi đang trong quá trình di chuyển một kho hàng tại chỗ từ SQL Server 2014 sang Azure datwarhouse và tôi gặp phải một vấn đề với UDFs.
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
UDF này hoạt động hoàn hảo trên SQL Server 2014. Khi tôi tạo cái này trên kho dữ liệu Azure, nó được tạo nhưng nó không hoạt động khi tôi truy vấn nó. Nó trả về a NULL
. Tôi đã xác minh những điều rõ ràng như liệu bảng mục tiêu có tồn tại hay không. Tất cả đều kiểm tra. Tôi đã xem tài liệu CREATE FUNCTION cho kho dữ liệu Azure và nó có một ví dụ UDF chuyển đổi int
thành a decimal
. Điều này hoạt động hoàn hảo trên Azure DW. Khoảnh khắc tôi viết một hàm đơn giản có một select
, nó thất bại. Thật không may, tài liệu của Azure ở đây không thực sự hữu ích và tôi đã tự hỏi liệu có ai trong số các bạn gặp phải vấn đề này không. Nếu có, bạn đã giải quyết như thế nào?
Tôi vừa thử nghiệm một trường hợp sử dụng khác và nó cũng không hoạt động:
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