Counting the number of deleted rows in a SQL Server stored procedure

75,431

Solution 1

Have you tried SET NOCOUNT OFF?

Solution 2

I use @@ROWCOUNT for this exact purpose in SQL2000 with no issues. Make sure that you're not inadvertantly resetting this count before checking it though (BOL: 'This variable is set to 0 by any statement that does not return rows, such as an IF statement').

Solution 3

Just do this:

SET NOCOUNT off ;
SELECT @p1 = @@ROWCOUNT

where p1 is the output parameter you set in the stored procedure. Hope it helps.

Solution 4

In your example @@ROWCOUNT should work - it's a proper way to find out a number of deleted rows. If you're trying to delete something from your application then you'll need to use SET NOCOUNT ON

According to MSDN @@ROWCOUNT function is updated even when SET NOCOUNT is ON as SET NOCOUNT only affects the message you get after the the execution.

So if you're trying to work with the results of @@ROWCOUNT from, for example, ADO.NET then SET NOCOUNT ON should definitely help.

Solution 5

I found a case where you can't use @@rowcount, like when you want to know the distinct count of the values that were deleted instead of the total count. In this case you would have to do the following:

delete from mytable 
where datefield = '5-Oct-2008' 
output deleted.datefield into #doomed

select count(distinct datefield)
from #doomed

The syntax error in the OP was because output did not include deleted before the datefield field name.

Share:
75,431
Unsliced
Author by

Unsliced

Coder. Geek. Cyclist. Rower. Ex-academic. Dad. Occasional manager. Part-time webmaster. Been on the Interwebs for longer than most realise there has been one. Gentle opinions, strongly held.

Updated on July 09, 2022

Comments

  • Unsliced
    Unsliced almost 2 years

    In SQL Server 2005, is there a way of deleting rows and being told how many were actually deleted?

    I could do a select count(*) with the same conditions, but I need this to be utterly trustworthy.

    My first guess was to use the @@ROWCOUNT variables - but that isn't set, e.g.

    delete 
    from mytable 
    where datefield = '5-Oct-2008' 
    
    select @@ROWCOUNT 
    

    always returns a 0.

    MSDN suggests the OUTPUT construction, e.g.

    delete from mytable 
    where datefield = '5-Oct-2008' 
    output datefield into #doomed
    
    select count(*) 
    from #doomed
    

    this actually fails with a syntax error.

    Any ideas?