无法在 T-SQL 标量函数中 return 顶部记录

Unable to return top record in a T-SQL scalar function

这是我的函数,它应该 return 记录的第一行:

ALTER FUNCTION [dbo].[fn_PAT_LastTS] 
(
    -- Add the parameters for the function here
    @PATcode varchar(50)
)
RETURNS datetime
AS
BEGIN
    -- Declare the return variable here
    DECLARE @lastTS datetime

    -- Add the T-SQL statements to compute the return value here
    SET @lastTS = (select top 1 tsdate from timesheet where pat = @PATcode order by tsdate desc)

    -- Return the result of the function
    RETURN @lastTS

END

出于某种原因,它总是 return 所有记录而不是最前面的记录。 'Top' 在 T-SQL 标量函数中是否有效?

编辑 1:我就是这样调用函数的。

select dbo.fn_PAT_LastTS('ZZ793843') from timesheet

编辑:添加了显示多行而不是前 1 行的 returned 数据的图片。

试试这个:

SELECT TOP 1 @lastTS = tsdate FROM timesheet WHERE pat = @PATcode ORDER BY tsdate DESC

编辑:

问题在于您调用函数的方式:

SELECT dbo.fn_PAT_LastTS('ZZ793843') FROM timesheet

这将 select 来自 timesheet 的所有行,其中一列的值是 dbo.fn_PAT_LastTS('ZZ793843') 的结果。你应该这样称呼它:

SELECT * FROM timesheet WHERE tsdate = dbo.fn_PAT_LastTS('ZZ793843')

SELECT dbo.fn_PAT_LastTS('ZZ793843')

正在为时间表中的每一行调用标量。

尝试以下操作:

select dbo.fn_PAT_LastTS('ZZ793843')

你可以通过使用来简化整个事情:

select max(tsdate) as tsdate 
from timesheet 
where pat = @PATcode