2010-01-13 3 views
4

Взгляните на этот SP.Подсчет записей в SQL Server

ALTER PROCEDURE [dbo].[sp_GetRecTitleVeh] 

AS 
BEGIN 
select 
    a.StockNo, c.ClaimNo, 
    v.VIN, v.[Year],v.Make, v.Model, 
    c.DOAssign, t.DOLoss, t.RecTitleDate 
From 
    dbo.Assignments a, 
    dbo.Assignment_ClaimInfo c, 
    dbo.Assignment_TitleInfo t, 
    dbo.Assignment_VehicleInfo v 
Where 
    a.AssignmentID= c.AssignmentID and 
    c.AssignmentID= t.AssignmentID and 
    t.AssignmentID= v.AssignmentID and 
    t.RecTitleDate is not null and 
    c.InsuranceComp = 'XYZ' and 
    a.StockNo not in (select StockNo from dbo.Invoice where InvoiceType = 'Payment Invoice') 
order by t.RecTitleDate 
END 

Этот SP работает отлично и дает мне требуемый результат.

Мне нужно спросить, есть ли какой-либо кратчайший способ подсчета записей, полученных при выполнении этого SP. Напр. Я пытаюсь как этот

select count(*) from sp_GetRecTitleVeh 

Я знаю, что есть решение, как -

ALTER PROCEDURE [dbo].[sp_CountRecTitleVeh] 

AS 
BEGIN 
select 
    count(a.StockNo) 
From 
    dbo.Assignments a, 
    dbo.Assignment_ClaimInfo c, 
    dbo.Assignment_TitleInfo t, 
    dbo.Assignment_VehicleInfo v 
Where 
    a.AssignmentID= c.AssignmentID and 
    c.AssignmentID= t.AssignmentID and 
    t.AssignmentID= v.AssignmentID and 
    t.RecTitleDate is not null and 
    c.InsuranceComp = 'XYZ' and 
    a.StockNo not in (select StockNo from dbo.Invoice where InvoiceType = 'Payment Invoice') 
order by t.RecTitleDate 
END 

У вас есть какие-либо идеи, как я мог рассчитывать записи получили, выполнив SP.

Спасибо, что поделились своим ценным временем.

ответ

5

Try ...

EXEC sp_GetRecTitleVeh 
SELECT @@Rowcount 
+0

Обратите внимание, что это не такая хорошая идея. если вы добавите одну команду после выбора в своей хранимой процедуре, это не сработает. –

1

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

также начать использовать правильный синтаксис соединения. старый синтаксис для левого (=) и правых jons (=) устарел.

+0

Спасибо Младен !!! Как вы думаете, есть ли какие-либо улучшения скорости, используя INNER JOIN вместо = операторов? – IrfanRaza

+0

скорость нет, считывание есть. не говоря уже о том, что старый sysnatx не будет работать в новых версиях SQL-сервера. –

1

Я считаю, что предпочтительный подход - @@rowcount.

Но, только для записи, если вы обрабатываете событие SqlCommand.StatementCompleted, вы можете получить сообщение DONE_IN_PROC, которое возвращается клиенту. Это включает количество затронутых строк. Но вы не можете использовать SET NOCOUNT ON, если хотите получить DONE_IN_PROC, поэтому производительность будет немного затруднена, если вы это сделаете.

Смежные вопросы