SQL Server SQL UDF -循环遍历表

nvbavucw  于 2022-12-17  发布在  其他
关注(0)|答案(1)|浏览(137)

我正在用SQL开发一个UDF,通过将函数应用于日期列,它可以生成哪些日期是假日,哪些日期不是假日。它将与我已经设置的视图(dbo.Holidays)进行比较,该视图包含所有需要比较的公共假日。
目前我拥有的代码:

CREATE FUNCTION [dbo].[IsHoliday] (
            @Date DATE) 

RETURNS BIT

AS BEGIN
DECLARE @Check BIT

SELECT @Check = CASE WHEN @Date = [Holiday] 
                    THEN 1
                    ELSE 0
                    END
                FROM dbo.Holidays

        RETURN (@Check)
END

示例数据(Holidays表):

预期结果:

2022-12-12 |    0 |
2020-01-01 |    1 |
2020-01-02 |    1 |
2020-02-06 |    1 |

当前,结果显示为:

2022-12-12 |    0 |
2020-01-01 |    1 |
2020-01-02 |    0 |
2020-02-06 |    0 |

到目前为止,我遇到的问题是-当我将此函数应用于日期列时,它只生成“1”到第一个公共假日,其余所有假日都生成为“0”。我觉得视图需要遍历我应用此函数的数据集的每一行。我该如何修复它?
谢谢
尝试在join中包含一个case,但也不起作用。

2izufjch

2izufjch1#

您当前的查询只是获取最顶端(未定义顺序)的记录。您需要检查特定记录,您可以使用EXISTS执行此操作:

CREATE FUNCTION [dbo].[IsHoliday]
(
    @Date DATE
) 
RETURNS BIT
AS
BEGIN
    RETURN
        CASE WHEN EXISTS (
            SELECT 1
            FROM dbo.Holidays
            WHERE [Holiday] = @Date
        ) THEN 1 ELSE 0 END;
END;

相关问题