Tengo que administrar un registro donde tengo que ver el número de filas que inserta una transacción. ¿Hay alguna forma de hacerlo de forma dinámica?Cómo obtener el número de filas insertadas por una transacción
Respuesta
@@ ROWCOUNT indicará el número de filas afectadas por la última instrucción SQL, lo mejor es capturarlo en una variable local siguiendo el comando en cuestión, ya que su valor cambiará la próxima vez que lo mire :
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]
SALIDA:
(2 row(s) affected)
Rows ROWCOUNT
----------- -----------
2 1
(1 row(s) affected)
que presentamos lo Rows
valor de 2, el número de filas insertadas, pero ROWCOUNT es 1 porque el comando SELECT @[email protected]@ROWCOUNT
afectada fila 1
si tiene múltiples INSERTOS o ACTUALIZACIONES, etc. en su transacción, debe determinar cómo le gustaría "contar" lo que está sucediendo. Podría tener un total por separado para cada tabla, un único gran valor total o algo completamente diferente. Tendrá que declarar una variable para cada total que desea seguir y agregar a ella después de cada operación que se aplica a ella:
--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
En caso de necesitar más información para su registro/auditoría que pueda cláusula OUTPUT: De esta manera, no solo mantiene el número de filas afectadas, sino también los registros.
Como un ejemplo de la Cláusula de salida en caso de insertos: SQL Server list of insert identities
DECLARE @InsertedIDs table(ID int);
INSERT INTO YourTable
OUTPUT INSERTED.ID
INTO @InsertedIDs
SELECT ...
HTH
he encontrado la respuesta a mayo post anterior. Aquí está.
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. Obtener el número de filas insertadas en ON DUPLICATE KEY UPDATE inserción múltiple?
- 2. Zend_Db: ¿Cómo obtener el número de filas de una tabla?
- 3. Devolución de filas insertadas en PostgreSQL
- 4. ¿Cómo obtengo la ID de varias filas insertadas en MySQL?
- 5. MySQL obtener el número de filas en una tabla innodb
- 6. Obtener el número de filas no ocultas en una tabla
- 7. Obteniendo el número de filas insertadas en IBM DB2 V6R1 (AS400) a través de JBDC
- 8. contar el número de filas insertadas desde la última consulta SQL
- 9. Obtener índice de filas insertadas de una base de datos MySQL
- 10. Obtener el número de filas en una tabla HTML
- 11. ¿Cómo obtener el número de filas eliminadas en PostgreSQL?
- 12. Cómo obtener el número de filas con SqlDataReader en C#
- 13. ¿Cómo obtener el número de filas de un GridView?
- 14. ¿Cómo obtener el número de filas afectadas en sqlalchemy?
- 15. ¿Cómo cuento el número de filas devueltas por subconsulta?
- 16. ¿Cómo obtener el número máximo de filas por grupo/partición en SQL Server?
- 17. Devuelve el número de filas afectadas por las instrucciones UPDATE
- 18. Número de filas afectadas por una ACTUALIZACIÓN en PL/SQL
- 19. número de filas mysql por hora
- 20. Sql Insertar declaración devolver "cero/sin filas insertadas"
- 21. ¿Cómo obtener el número de filas en una tabla en un Datastore?
- 22. Conseguir el número de filas de una consulta GROUP BY
- 23. Obteniendo el número de filas afectadas por una ACTUALIZACIÓN en PostgreSQL
- 24. Recuperando IDs insertadas de saveAll() en CakePHP
- 25. Obtener el número de filas afectadas en una declaración de actualización de MySQL?
- 26. TABLESAMPLE devuelve el número de filas incorrecto?
- 27. el número de filas de una instrucción Select
- 28. Python: cómo obtener el número de mili segundos por jiffy
- 29. ¿Variable que contiene el número de filas afectadas por el DELETE previo? (en una función)
- 30. php obtener el número de una cadena
En lugar de utilizar SELECT @Rows = @@ ROWCOUNT', probé 'set @Rows = @@ ROWCOUNT' y recibido aún los mismos resultados. ¡Gracias, buena publicación! – MikeTeeVee
FYI: _Even_ envolviendo mi declaración INSERT en las instrucciones de Transaction block provocó que se reiniciara @@ RowCount, ¡así que tuve que establecer la variable @Rows antes de llamar a Commit! – MikeTeeVee
@MikeTeeVee usando 'SELECT' puede hacer múltiples asignaciones en una sola instrucción, por lo que puede agregar fácilmente 'SELECT @Rows = @@ ROWCOUNT, @ID = SCOPE_IDENTITY(), @Error = @@ ERROR'. Con 'SET' solo puedes establecer un valor. 'TRY CATCH' elimina la necesidad de capturar' @@ ERROR', pero todavía uso 'SELECT'. –