Return 来自标量函数 SELECT 查询的 smalldatetime 值

Return smalldatetime value from scalar function SELECT query

我想在 SQL 服务器 (2017) 中创建一个标量函数,它利用日历 table 我建立了一段时间以计算和 return 一个日期从给定日期向前的给定工作日数。我一直在为如何适当地传回 SMALLDATETIME return 值而苦恼。想知道我在尝试什么:

CREATE FUNCTION dbo.AddBusDaysToDate
(
   @startDate SMALLDATETIME,
   @numBusDays INT,
)
RETURNS SMALLDATETIME
AS
BEGIN
   DECLARE @rs SMALLDATETIME;

   SELECT @rs = TOP(1) dt
   FROM (
        SELECT TOP(@numBusDays) dt
        FROM dbo.OurCalendar
        WHERE isWeekday = 1
        AND isHoliday = 0
        AND dt >= @startDate
        ORDER BY dt ASC
    ) as ID
    ORDER BY dt DESC

    RETURN @rs
END

dt 是我们日历 table 上的 SMALLDATETIME 数据类型。

当为变量插入值时,查询本身按预期运行,但我试图重新调整一个类似的函数的用途,该函数使用不同的数据类型计算日历上两点之间的工作日差异。因此,我不确定我是否在连续拉到 @rs 而不是单个值,或者如何从 SELECT 查询结果中 separate/isolate 那个特定的 'cell' 。我想我可能遗漏了一些非常简单的东西。

任何帮助或正确方向的观点将不胜感激。

我能够通过以下方式解决:

CREATE FUNCTION dbo.AddBusDaysToDate
(
    @startDate SMALLDATETIME,
    @numBusDays INT,
)
RETURNS SMALLDATETIME
AS
BEGIN
   DECLARE @rs SMALLDATETIME;
   DECLARE @workdayModifier INT;

   IF EXISTS (
      SELECT dt FROM dbo.OurCalendar 
      WHERE dt = @startDate 
      AND isWeekday = 1 
      AND isHoliday = 0
      )
   SET @workdayModifier = 1
   ELSE
   SET @workdayModifier = 0


   SELECT TOP(1) @rs = dt
       FROM (
           SELECT TOP(@numBusDays + @workdayModifier) dt
           FROM dbo.OurCalendar
           WHERE isWeekday = 1
           AND isHoliday = 0
           AND dt >= @startDate
           ORDER BY dt ASC
       ) as ID
       ORDER BY dt DESC
   
   RETURN @rs    

END