这是我的功能,应该返回记录的第一行:
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
由于某种原因,它总是返回所有记录而不是顶层记录。是' Top'在T-SQL标量函数中工作吗?
编辑1:这就是我调用函数的方式。
select dbo.fn_PAT_LastTS('ZZ793843') from timesheet
编辑:添加了返回数据的图片,显示多行而不是前1行。
答案 0 :(得分:2)
试试这个:
SELECT TOP 1 @lastTS = tsdate FROM timesheet WHERE pat = @PATcode ORDER BY tsdate DESC
问题在于您如何调用该功能:
SELECT dbo.fn_PAT_LastTS('ZZ793843') FROM timesheet
这将从timesheet
中选择所有行,其中一列的值为dbo.fn_PAT_LastTS('ZZ793843')
的结果。你应该这样称呼它:
SELECT * FROM timesheet WHERE tsdate = dbo.fn_PAT_LastTS('ZZ793843')
OR
SELECT dbo.fn_PAT_LastTS('ZZ793843')
答案 1 :(得分:2)
正在为时间表中的每一行调用标量。
尝试以下方法:
select dbo.fn_PAT_LastTS('ZZ793843')
答案 2 :(得分:2)
只需使用以下内容即可简化整个过程:
select max(tsdate) as tsdate
from timesheet
where pat = @PATcode