Come posso ottenere il numero di record interessati da una stored procedure?


86

Per INSERT, UPDATEe DELETEle istruzioni SQL eseguite direttamente contro la base di dati, la maggior parte dei provider di database restituiscono il conteggio delle righe interessate. Per le stored procedure, il numero di record interessati è sempre -1.

Come otteniamo il numero di record interessati da una stored procedure?


1
Set No Count era anche il mio problema. Per testare, esegui la tua stored procedure in Management Studio e vedi se ottieni i conteggi, se lo fai, assicurati di avere un output variabile.
user2624356

Risposte:


80

Registrare un parametro out per la stored procedure e impostare il valore in base a @@ROWCOUNTse si utilizza SQL Server. Usa SQL%ROWCOUNTse stai usando Oracle.

Tieni presente che se ne hai più INSERT/UPDATE/DELETE, avrai bisogno di una variabile per memorizzare il risultato @@ROWCOUNTdi ciascuna operazione.


46

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

L' @@RowCountfunziona solo se si emette subito dopo. Quindi, se stai intercettando errori, devi farlo sulla stessa linea. Se lo dividi, perderai quello che metti per secondo.

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

Se hai più istruzioni, dovrai acquisire il numero di righe interessate per ciascuna e sommarle.

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

33

Risulta per me che è SET NOCOUNT ONstato impostato nello script della stored procedure (per impostazione predefinita su SQL Server Management Studio) eSqlCommand.ExecuteNonQuery(); sempre restituito -1.

L'ho appena acceso: SET NOCOUNT OFFsenza bisogno di usare @@ROWCOUNT.

Ulteriori dettagli sono disponibili qui: SqlCommand.ExecuteNonQuery () restituisce -1 quando si esegue Inserisci / Aggiorna / Elimina


Questo funziona per me. Il mio processo memorizzato è solo una semplice istruzione di inserimento e sembra funzionare. Grazie!
Harvey Darvey

Grazie! Buon lavoro sulla referenza.
Leo Gurdian

8

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



Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.