2016-05-25 6 views
0

У меня есть оператор select. Я хотел бы знать, возвращает ли этот оператор select любые строки или нет. Основываясь на записи, я хотел бы выполнить некоторые другие действия.SQL @@ RowCount on Select Statement

Я попытался использовать @@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 (выберите 1 из EmployeeStatus, где EmployeeCode = @employee_id)' –

ответ

4

@@ROWCOUNTделает работы с отдельными заявлениями. Вы не показали свою попытку, поэтому я не могу сказать, что вы делаете неправильно.

, но в любом случае, это было бы обеспечить сверку как пример:

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 

И как другие заявили, если это просто истина/ложь вопрос - в отличие от do 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