Devo gestire un log in cui devo vedere il numero di righe inserite da una transazione. C'è un modo per farlo dinamicamente?Come ottenere il numero di righe inserite da una transazione
risposta
@@ ROWCOUNT restituirà il numero di righe interessate dallo ultimo SQL statement, è meglio catturarlo in una variabile locale seguendo il comando in questione, poiché il suo valore cambierà la prossima volta che lo guardi :
DECLARE @Rows int
DECLARE @TestTable table (col1 int, col2 int)
INSERT INTO @TestTable (col1, col2) select 1,2 union select 3,4
SELECT @[email protected]@ROWCOUNT
SELECT @Rows AS Rows,@@ROWCOUNT AS [ROWCOUNT]
OUTPUT:
(2 row(s) affected)
Rows ROWCOUNT
----------- -----------
2 1
(1 row(s) affected)
si ottiene Rows
valore 2, il numero di righe inserite, ma ROWCOUNT è 1 perché il comando SELECT @[email protected]@ROWCOUNT
influenzata 1 fila
se si hanno più INSERT o UPDATE, ecc. Nella transazione, è necessario determinare come si desidera "contare" cosa sta succedendo. Potresti avere un totale separato per ogni tabella, un singolo valore totale complessivo o qualcosa di completamente diverso. Avrete bisogno di dichiarare una variabile per ciascun totale che si desidera tenere traccia e aggiungere ad essa dopo ogni operazione che si applica ad esso:
--note there is no error handling here, as this is a simple example
DECLARE @AppleTotal int
DECLARE @PeachTotal int
SELECT @AppleTotal=0,@PeachTotal=0
BEGIN TRANSACTION
INSERT INTO Apple (col1, col2) Select col1,col2 from xyz where ...
SET @[email protected][email protected]@ROWCOUNT
INSERT INTO Apple (col1, col2) Select col1,col2 from abc where ...
SET @[email protected][email protected]@ROWCOUNT
INSERT INTO Peach (col1, col2) Select col1,col2 from xyz where ...
SET @[email protected][email protected]@ROWCOUNT
INSERT INTO Peach (col1, col2) Select col1,col2 from abc where ...
SET @[email protected][email protected]@ROWCOUNT
COMMIT
SELECT @AppleTotal AS AppleTotal, @PeachTotal AS PeachTotal
Nel caso in cui avete bisogno di ulteriori informazioni per il registro/audit è possibile clausola OUTPUT: In questo modo, non solo manterrai il numero di righe interessate, ma anche i record.
Come esempio della clausola di uscita con inserti: SQL Server list of insert identities
DECLARE @InsertedIDs table(ID int);
INSERT INTO YourTable
OUTPUT INSERTED.ID
INTO @InsertedIDs
SELECT ...
HTH
ho trovato la risposta a inserire un precedente. Ecco qui.
CREATE TABLE #TempTable (id int)
INSERT INTO @TestTable (col1, col2) OUTPUT INSERTED.id INTO #TempTable select 1,2
INSERT INTO @TestTable (col1, col2) OUTPUT INSERTED.id INTO #TempTable select 3,4
SELECT * FROM #TempTable --this select will chage @@ROWCOUNT value
- 1. Zend_Db: come ottenere il numero di righe da una tabella?
- 2. Ottenere il numero di righe inserite per ON DUPLICATE KEY UPDATE multiple insert?
- 3. Come posso ottenere l'ID di più righe inserite in MySQL?
- 4. Conte Come righe inserite Da ultimo SQL Query
- 5. Limite su più righe inserite
- 6. MySql ottenere il numero di righe
- 7. ottenere il numero di righe da un'istruzione Select
- 8. Seleziona le righe appena inserite
- 9. Ritorno di righe inserite in PostgreSQL
- 10. Come ottenere il numero di righe nella tabella di Cassandra
- 11. Come ottenere il numero di righe cancellate in PostgreSQL?
- 12. Come ottenere il numero di righe utilizzando SqlDataReader in C#
- 13. Come ottenere il numero di righe di un GridView?
- 14. php ottenere il numero da una stringa
- 15. Come ottenere il numero di righe interessate in sqlalchemy?
- 16. GridView: come impostare il numero di righe da visualizzare
- 17. come ottenere il numero totale di righe con mysqli
- 18. Come posso ottenere l'identificativo del prodotto da una transazione ripristinata?
- 19. Ottenere il numero di righe interessate da un UPDATE in PostgreSQL
- 20. Come ottenere il numero di righe del risultato selezionato da sqlite3?
- 21. Come ottenere il numero selezionato da NumberPicker?
- 22. Ottenere il numero totale di righe in Entity Framework
- 23. Come ottenere il conteggio delle righe da un database azzurro?
- 24. MySQL ottiene il numero di righe in una tabella innodb
- 25. Come ottenere il numero di righe interessate mentre si esegue la query MySQL da bash?
- 26. In Ruby, come posso ottenere il numero di righe in una stringa?
- 27. Come ottenere il numero di elementi in ObservableCollection da XAML?
- 28. Come posso ottenere il numero di record interessati da una stored procedure?
- 29. Regola il numero di righe da formare :: Textarea Laravel 5
- 30. Ottieni il numero di righe restituite da ResultSet in Java
Invece di utilizzare 'SELECT @Rows = @@ ROWCOUNT', ho provato' SET @Rows = @@ ROWCOUNT' e ho ancora ricevuto gli stessi risultati. Grazie, bel post! – MikeTeeVee
FYI: _Even_ il wrapping del mio INSERT statment in Transaction block statements ha causato il reset di @@ RowCount, quindi ho dovuto impostare la variabile @Rows prima di chiamare Commit! – MikeTeeVee
@MikeTeeVee usando 'SELECT' è possibile creare più assegnazioni in una singola istruzione, in modo da poter aggiungere facilmente' SELECT @Rows = @@ ROWCOUNT, @ ID = SCOPE_IDENTITY(), @Error = @@ ERRORE'. Con 'SET' è possibile impostare solo un valore. 'PROVA CATCH' elimina la necessità di catturare' @@ ERRORE', ma uso ancora 'SELECT'. –