2012-08-06 9 views
27

Qual è lo scopo di @@rowcount? MSDN non menziona il suo ambito.Scopo di @@ rowcount?

Restituisce il numero di righe interessate dall'ultima istruzione.

Ok.

Nel mio SP - Sto inserendo in una tabella, che ha un insert trigger che fa un altro inserimento quando un nuovo valore viene inserito nella tabella.

Domanda:

Al che il campo di applicazione @@rowcount si riferiscono? (trigger o SP)?

risposta

20

Concesso, l'articolo è per SQL Server 2000, ma si spera che l'ambito non cambi tra le versioni. Secondo l'articolo How triggers affect ROWCOUNT and IDENTITY in SQL Server 2000, il trigger @@ROWCOUNT non sarà interessato dai trigger.

In particolare:

E 'sicuro da usare @@ ROWCOUNT in SQL Server 2000 anche quando c'è un trigger sulla tabella di base. Il trigger non distorce i risultati; otterrai ciò che ti aspetti. @@ ROWCOUNT funziona correttamente anche quando NOCOUNT è impostato.

Quindi, se si aggiorna tre file, e gli aggiornamenti di trigger cinque righe altrove, si otterrà una @@ROWCOUNT di 3.

Inoltre, dalla risposta di GBN in SQL Server - is using @@ROWCOUNT safe in multithreaded applications?:

@@ ROWCOUNT è sicuro sia per l'ambito che per la connessione.

In realtà, si legge solo l'ultima istruzione conteggio delle righe per la connessione e la portata.

+0

Grazie per questa spiegazione! –

11

ogni inserimento/aggiornamento/select/set/DELETE ripristina la @@rowcount alle righe interessate dall'istruzione eseguita

begin 
declare @myrowcount int, 
    @myrowcount2 int 
insert stmt 
SET @[email protected]@rowcount 
if @myrowcount>0 
begin 
insert stmt 
SET @myrowcount2 [email protected]@rowcount 
if @myrowcount2 >0 
do smthg 
end 
end 

o provare questo

SELECT * FROM master.sys.objects -- 50 rows 
    IF (1=1) 
     SELECT @@ROWCOUNT AS RowsAffected -- 0, because the IF did not affect any rows 

anche un'istruzione IF colpisce è ... quindi il suo scopo è l'ultima istruzione letta.