2016-05-25 55 views
0

我有一个select语句。我想知道这个select语句是否返回任何行。根据记录数量,我想执行一些其他操作。SQL @@ RowCount on Select语句

我尝试使用@@RowCount来获得计数,但它似乎无法与选择语句正常工作。

任何有关如何使用此选项的建议或选择后可以执行我的发布任务的任何其他方式。

select  
    isnull(TotalHoursWorkedAmount, 0)/26 
from  
    EmployeeStatus ESI 
where 
    ESI.EmployeeCode = @employee_id 

添加另一片

if @@ROWCOUNT=0 
    SELECT dbo.fxGetAverage(@employee_id) 
+0

所以你需要知道的是,如果这个查询返回的东西或不? – Stivan

+0

@@ ROWCOUNT返回最后一条语句影响的行数。 https://msdn.microsoft.com/en-us/library/ms187316.aspx –

+0

这是我的猜测,但它看起来像你想返回的东西*而不是*第一个空的结果。在这种情况下,您应该使用'if exists'(从EmployeeStatus中选择1,其中EmployeeCode = @employee_id)' –

回答

4

@@ROWCOUNT与SELECT语句工作。你没有显示你的尝试,所以我不能说你做错了什么。

但无论如何,这将提供的行数为例:

select isnull(TotalHoursWorkedAmount, 0)/26 
    from EmployeeStatus ESI 
    where ESI.EmployeeCode = @employee_id 

select @@rowcount 

,或者存储在一个变量:

declare @myCount int 

select isnull(TotalHoursWorkedAmount, 0)/26 
    from EmployeeStatus ESI 
    where ESI.EmployeeCode = @employee_id 

set @myCount = @@rowcount 

至于别人说,如果它只是一个真/假问题 - 相反做x如果y行数,z如果v行数 - 那么你最好做一个存在,除非你真的需要t他选择的结果为

if exists ( 
    select 1 
    from EmployeeStatus ESI 
    where ESI.EmployeeCode = @employee_id 
) 
    begin 
     print 'do stuff' 
    end 
+0

感谢您的解释。我更新了我正在尝试通过更新的代码的问题。 – Naga

2

如果由于某种原因,你不能让@@rowcount工作,就可以使用这个查询来检查,如果你得到任何结果。使用if语句。

if not exists(select isnull(TotalHoursWorkedAmount, 0)/26 from EmployeeStatus ESI where ESI.EmployeeCode = @employee_id) 
    begin 
      SELECT dbo.fxGetAverage(@employee_id) 
    end 
+0

谢谢。我想看看这是否存在,如果它存在,就不会执行任何操作。否则我想调用一个不同的函数。 – Naga

+0

@Naga我已经更新了我的答案以满足您的要求。 – Stivan