2012-09-15 30 views
11

He leído un poco sobre ROWCOUNT pero no es exactamente lo que estoy buscando. desde mi entendimiento rowcount indica el número de filas afectadas DESPUÉS de ejecutar la consulta. lo que estoy buscando es saber ANTES de ejecutar la consulta. ¿es posible?cómo saber cuántas filas se verán afectadas antes de ejecutar una consulta en microsoft sql server 2008

+0

No, no es posible sin hacer dos consultas. ¿Por qué necesitas hacer esto sin embargo? Dependiendo del motivo de la solicitud, tal vez pueda hacer la verificación de consulta '@@ ROWCOUNT' y luego confirmar si es como se esperaba. O use 'COUNT (*) OVER()' para devolver el recuento de filas con la consulta. –

Respuesta

10

respuesta corta es no ..

No se puede obtener el número de filas antes de ejecutar el query..atleast en el servidor SQL.

La mejor manera de hacerlo es utilizar

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

luego ejecutar su consulta real

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

Aunque puede usar las funciones de SQL Server Analytical para obtener el número total de filas que se están efectuando. Pero esto es solo en tiempo de ejecución. – rvphx

+0

no siempre será correcto ya que la actualización omitirá las filas donde no es necesario cambiar nada. por ejemplo: el nuevo valor y el valor anterior ya son iguales. –

+0

@HimanshuSaini: Hasta donde sé, SQL Server no comprobará si los valores antiguos y nuevos son los mismos, antes de actualizar. Simplemente actualiza todos los registros con condiciones coincidentes. Por favor, comparta si tiene algún documento al respecto. Eso sería un nuevo aprendizaje para mí –

1

La solución más simple es reemplazar las columnas en el SELECT * FROM... con SELECT Count(*) FROM ... y el resto de su consulta (la cláusula WHERE debe ser la misma) antes de ejecutarlo. Esto le dirá cuántas filas se verán afectados

3

El plan de ejecución estimado se va a dar filas afectadas, basada en las estadísticas, por lo que ganó' Realmente te ayudo en este caso.

Lo que yo recomendaría es copiar su UPDATE statement o DELETE statement y convertirlo en SELECT. Ejecuta eso para ver cuántas filas vuelven y tienes la respuesta a cuántas filas se habrán actualizado o eliminado.

Ej:

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

se convierte en:

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

También puede utilizar BEGIN TRANSACTION antes de ejecutarse la operación. Puede ver el número de filas afectadas. Desde allí, COMPROMETE los resultados o usa ROLLBACK para devolver los datos al estado original.

iniciar la transacción

Actualizar tabla conjunto col = 'algo' donde col2 = 'otra cosa';

Commit/Rollback

Cuestiones relacionadas