我在sql server 2000中使用函数中的rowcount时遇到了问题。
它显示错误,如Invalid use of 'UNKNOWN TOKEN' within a function.
我的功能是这样的。
ALTER Function fnc_GetOpenShiftWorkID (@EMP_ID int,@Counter int,@date Datetime) returns int as
BEGIN
SET ROWCOUNT @Counter
declare @result int
if exists(select * from tbl_org_workinghrs WHERE EMP_ID=@EMP_ID and SDATE=@DATE)
BEGIN
select @result= WORK_ID
from tbl_org_working_hrs work_hrs
inner join tbl_org_shift_group sgroup on sgroup.WH_ID=work_hrs.WORK_ID
inner join tbl_org_workinghrs workhrs on workhrs.GROUP_ID=sgroup.GROUP_ID
WHERE EMP_ID=@EMP_ID
and SDATE=@DATE
order by
IN_START
END
ELSE
BEGIN
if exists(select * from tbl_org_workinghrs where EMP_ID=0)
BEGIN
select @result=WORK_ID
from tbl_org_working_hrs
WHERE IS_DEFAULTSHIFT=1
END
END
return @result
END
答案 0 :(得分:1)
您希望获得IN_START
排序的第n行的值。
从SQL Server 2005开始,您可以使用top(n)
或row_number()
。
在SQL Server 2000中,您可以使用具有标识ID字段的表变量作为临时存储。
像这样。
declare @T table
(
ID int identity,
WORK_ID int
)
insert into @T (WORK_ID)
select WORK_ID
from tbl_org_working_hrs work_hrs
inner join tbl_org_shift_group sgroup
on sgroup.WH_ID=work_hrs.WORK_ID
inner join tbl_org_workinghrs workhrs
on workhrs.GROUP_ID=sgroup.GROUP_ID
where EMP_ID=@EMP_ID and
SDATE=@DATE
order by IN_START
select @result = WORK_ID
from @T
where ID = @Counter