【问题标题】:SQL Function returns no results, but function content returns resultsSQL 函数不返回结果,但函数内容返回结果
【发布时间】:2014-09-10 12:34:38
【问题描述】:

我有如下SQL函数定义和测试:

IF EXISTS (SELECT *
       FROM   sys.objects
       WHERE  object_id = OBJECT_ID(N'[dbo].[udf_Assessment_Timelines]')
              AND type IN ( N'FN', N'IF', N'TF', N'FS', N'FT' ))
  DROP FUNCTION [dbo].udf_Assessment_Timelines
GO 
CREATE FUNCTION dbo.udf_Assessment_Timelines
(
    @startDate datetime, 
    @endDate datetime,
    @assessmentId int = 14,
    @outIds nvarchar(max)='3,9,10'
)
RETURNS @result TABLE(case_id int, [TOTAL DAYS] int)
AS
BEGIN
    DECLARE @in TimeLineReportList;
    DECLARE @out TimeLineReportList;

    INSERT INTO @in
       SELECT * FROM dbo.udf_First_Timeline_Entries_Of_Status(@assessmentId)

    INSERT INTO @out
       SELECT * FROM dbo.udf_First_Timeline_Entries_Of_Any_Statuses(@outIds)

    INSERT INTO @result
        SELECT * FROM dbo.udf_Generic_Timelines(@startDate, @endDate, @in, @out,null)

    RETURN
END
GO

SELECT * FROM dbo.udf_Assessment_Timelines('2013-01-01T00:00:00.000', '2014-01-01T00:00:00.000',null,null)

调用函数的最后一行返回 0 行。但是,下面的 SQL 在直接执行时会返回行。有什么区别?

DECLARE @result TABLE(case_id int, [TOTAL DAYS] int)    
DECLARE @in TimeLineReportList;
DECLARE @out TimeLineReportList;

INSERT INTO @in
   SELECT * FROM dbo.udf_First_Timeline_Entries_Of_Status(14)

INSERT INTO @out
   SELECT * FROM dbo.udf_First_Timeline_Entries_Of_Any_Statuses('3,9,10')

INSERT INTO @result
    SELECT * FROM dbo.udf_Generic_Timelines('2013-01-01T00:00:00.000', '2014-01-01T00:00:00.000', @in, @out,null)

SELECT * FROM @result

【问题讨论】:

    标签: sql sql-server tsql sql-server-2012-express


    【解决方案1】:

    在不起作用的版本中,您将 @assessmentId 和 @outIds 覆盖为 null。

    SELECT * FROM dbo.udf_Assessment_Timelines('2013-01-01T00:00:00.000', 
        '2014-01-01T00:00:00.000', null, null)
                                   ^     ^
    

    如果您想对这些参数使用默认值,请改用 default 关键字:

    SELECT * FROM dbo.udf_Assessment_Timelines('2013-01-01T00:00:00.000', 
        '2014-01-01T00:00:00.000', default, default)
                                   ^        ^
    

    【讨论】:

    • 谢谢!我是将 C# 逻辑应用于 SQL 的 C#-er。 :(
    猜你喜欢
    • 2022-06-17
    • 2011-12-27
    • 1970-01-01
    • 1970-01-01
    • 2012-12-27
    • 2020-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多