无法在 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
这是我的函数,它应该 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