2012-09-15 11 views
11

ho letto un po 'di ROWCOUNT ma non è esattamente quello che sto cercando. dalla mia comprensione rowcount afferma il numero di righe interessate DOPO che si esegue la query. quello che sto cercando è sapere PRIMA di eseguire la query. È possibile?come sapere quante righe saranno interessate prima di eseguire una query in microsoft sql server 2008

+0

No, non è possibile senza fare due query. Perché hai bisogno di fare questo però? A seconda del motivo della richiesta, è possibile eseguire la verifica della query '@@ ROWCOUNT', quindi eseguire il commit se è come previsto. Oppure usa 'COUNT (*) OVER()' per restituire il conteggio delle righe con la query. –

risposta

10

risposta breve è no ..

Non è possibile ottenere il numero di righe prima di eseguire il query..atleast in SQL Server.

Il modo migliore per farlo è usare

Select count(*) from <table> where <condtion> 

quindi eseguire la query attuale

[delete]or [update] [set col='val'] 
from <table> where <condtion> 
+0

Sebbene sia possibile utilizzare le funzioni analitiche di SQL Server per ottenere il numero totale di righe che vengono eseguite. Ma questo è solo in runtime. – rvphx

+0

non sarà sempre corretto in quanto l'aggiornamento salterà le righe dove nulla deve essere cambiato. per esempio: nuovo valore e vecchio valore è già lo stesso. –

+0

@HimanshuSaini: Per quanto ne so, SQL Server non verificherà se i valori vecchi e nuovi sono uguali, prima di aggiornare. Aggiorna solo tutti i record con le condizioni corrispondenti. Si prega di condividere se si dispone di documenti in merito. Sarebbe un nuovo apprendimento per me –

1

La soluzione più semplice è sostituire le colonne nello SELECT * FROM... con SELECT Count(*) FROM ... e il resto della query (la clausola WHERE deve essere la stessa) prima di eseguirla. Questo vi dirà quante righe saranno interessati

3

Il piano di esecuzione stimato sta per darvi le righe dipendere da statistiche, quindi ha vinto' ti sto davvero aiutando in questo caso.

Quello che vorrei raccomandare è copiare il tuo UPDATE statement o DELETE statement e trasformarlo in un SELECT. Eseguilo per vedere quante righe tornano e hai la tua risposta a quante righe sarebbero state aggiornate o cancellate.

Esempio:

UPDATE t 
SET t.Value = 'Something' 
FROM MyTable t 
WHERE t.OtherValue = 'Something Else' 

diventa:

SELECT COUNT(*) 
FROM MyTable t 
WHERE t.OtherValue = 'Something Else' 
5

È inoltre possibile utilizzare BEGIN TRANSACTION prima dell'esecuzione dell'operazione. Puoi vedere il numero di righe interessate. Da lì, COMMIT i risultati o usa ROLLBACK per riportare i dati nello stato originale.

iniziare la transazione

Aggiorna tabella insieme col = 'qualcosa' dove col2 = 'qualcos'altro';

Commit/Rollback

Problemi correlati