2009-07-29 12 views
75

Per INSERT, UPDATE e DELETE Istruzioni SQL eseguite direttamente sul database, la maggior parte dei provider di database restituisce il conteggio delle righe interessate. Per le stored procedure, il numero di record interessati è sempre -1.Come posso ottenere il numero di record interessati da una stored procedure?

Come si ottiene il numero di record interessati da una stored procedure?

+1

colori No conte era il mio problema pure. Per testare, eseguire la procedura memorizzata nello studio di gestione e vedere se si ottiene il conteggio, se lo si fa, quindi assicurarsi di avere un output variabile. – user2624356

risposta

74

Pubblicare un parametro out per la stored procedure, e impostare il valore in base a @@ROWCOUNT se si utilizza SQL Server. Utilizzare SQL%ROWCOUNT se si sta utilizzando Oracle.

Ricorda che se hai più INSERT/UPDATE/DELETE, avrai bisogno di una variabile per memorizzare il risultato da @@ROWCOUNT per ogni operazione.

8

Per Microsoft SQL Server è possibile restituire la variabile @@ ROWCOUNT per restituire il numero di righe interessate dall'ultima istruzione nella stored procedure.

41

@@RowCount fornirà il numero di record interessati da un'istruzione SQL.

@@RowCount funziona solo se lo si emette subito dopo. Quindi se intendi errori, devi farlo sulla stessa linea. Se lo dividi, ti perderai qualcun altro.

SELECT @NumRowsChanged = @@ROWCOUNT, @ErrorCode = @@ERROR 

Se si dispone di più istruzioni, si dovrà catturare il numero di righe interessate per ciascuno di essi e li sommano.

SELECT @NumRowsChanged = @NumRowsChanged + @@ROWCOUNT, @ErrorCode = @@ERROR 
-1

ATTENZIONE: @@ROWCOUNT può restituire fasulli dati se la tabella viene modificata ha innesca collegato ad esso!

Il @@ROWCOUNT restituirà il numero di record interessati dal TRIGGER, non la dichiarazione effettiva!

+8

Risulta che questo non è vero: http://stackoverflow.com/questions/7005225/sql-server-does-trigger-affects-rowcount – Tao

25

Mi risulta che SET NOCOUNT ON sia stato impostato nello script della stored procedure (per impostazione predefinita su SQL Server Management Studio) e SqlCommand.ExecuteNonQuery(); restituito sempre -1.

L'ho appena spento: SET NOCOUNT OFF senza bisogno di usare @@ROWCOUNT.

Maggiori dettagli si trovano qui: SqlCommand.ExecuteNonQuery() returns -1 when doing Insert/Update/Delete

+0

Questo funziona per me. Il mio stored proc è solo una semplice istruzione di inserimento, e sembra funzionare. Grazie! –

+0

Grazie! Buon lavoro sul riferimento. –

Problemi correlati