如何在 sqlserver 的函数中使用行计数?

发布于 2024-12-10 10:15:15 字数 944 浏览 0 评论 0原文

我在 sql server 2000 的函数中使用 rowcount 时遇到了问题。 它显示一个错误,例如在函数中无效使用'UNKNOWN TOKEN'。

我的函数是这样的。

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

I have faced a problem using rowcount in function in sql server 2000.
It shows an error like Invalid use of 'UNKNOWN TOKEN' within a function.

MY function is like this.

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

傲娇萝莉攻 2024-12-17 10:15:15

您想要获取按 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

You want to get the value of the n'th row ordered by IN_START.

From SQL Server 2005 later you could use top(n) or row_number().

In SQL Server 2000 you can use a table variable with an identity ID field as a temp storage.

Something like this.

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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文