2011-06-08 22 views
5

Tenemos RowCount para establecer el número de registros a devolver o afectar. Pero tenemos que configurar esto cada vez antes de ejecutar la instrucción sql. Estoy buscando una manera de configurar esto una vez que se inició mi aplicación y por lo tanto afecta a todas las consultas ejecutadas a través de mi aplicación.SQL Server: número máximo de registros para devolver

actualización

que quiero lograr una estrategia versión de prueba con registros limitados! ¡No quiero meterme con mi código real y desear de alguna manera que la base de datos restrinja el número de registros devueltos como resultado de cualquier consulta! Una alternativa podría ser pasar un parámetro a cada procedimiento de tienda, ¡pero realmente no me gusta este y estoy buscando alguna otra estrategia!

+2

ahora por qué lo haría quieres hacer eso? –

+0

Bueno, quiero restringir mi aplicación para buscar un número específico de registros en modo específico ... – mqpasta

+1

Eso suena peligroso: 6 meses después, está haciendo un cambio no relacionado en la aplicación, que de repente quiere actualizar 25 filas . Pero en otro lugar, ha establecido un límite de 20 aplicaciones y ahora, de repente, no se actualizan 5 filas, pero no aparecen mensajes de error. 6 meses más adelante, comienzas a investigar por qué algunas actualizaciones no parecen funcionar correctamente ... –

Respuesta

2

Usted no menciona el idioma de la aplicación que esté utilizando, por lo que no se puede dar el código, pero hacer una función de contenedor para conectar una base de datos. En esta función, después de conectarse a la base de datos, emita el SET ROWCOUNT n, configure n un parámetro y agregue cualquier lógica que necesite para hacerlo variable. Hago algo similar con CONTEXT_INFO, lo configuré en mi función de conexión.

Recuerde, necesitará conectarse a la base de datos en todas partes de su aplicación (use buscar y reemplazar) utilizando esta función de envoltura, y como resultado, siempre tendrá configurado el recuento de filas.

+0

¡esta será la solución mínima! pero de esta manera tengo que cambiar mucho código, ¡independientemente de buscar o reemplazar! pero es arriesgado y costoso ... – mqpasta

0

al iniciar la aplicación, restablézcala RowCount ejecutando el siguiente comando:

command.CommandText = "SET ROWCOUNT 0;"; 

Cuando se activa el modo específico, establecer el RowCount al valor necesario ejecutando el siguiente comando:

command.CommandText = "SET ROWCOUNT " + rowCount + ";"; 

Cuando el modo específico está desactivado, reinicie RowCount nuevamente.


Consulte SET ROWCOUNT (Transact-SQL)

+0

Encontré que no funcionaba ... se configuró solo para un comando específico pero no para todas las consultas futuras ... – mqpasta

5

Puede parametrizar TOP en su código para todos los comandos

DECLARE @rows int 
SET @row = ISNULL(@row, 2000000000) 
SELECT TOP (@rows) ... FROM .. 

Puede tener la máxima definida globalmente para todas sus consultas de esta manera, digamos por envolver o extender SQLCommand

SET ROWCOUNT no es un seguro opción: afecta a los conjuntos de resultados intermedios y tiene otro comportamiento impredecible. Y está obsoleto en parte al hecho caso omiso de E/T/D LMD: see MSDN

Utilizando SET ROWCOUNT no afectará DELETE, INSERT, UPDATE y declaraciones en la próxima versión de SQL Server

+0

Entiendo la consecuencia del uso de ROWCOUNT pero de hecho, solo acepto la declaración seleccionada ... de todos modos! ¡usando la media superior necesito cambiar todas mis consultas que realmente no quiero hacer! ¡Estoy buscando un parámetro de nivel de base de datos para lograr esto! – mqpasta

+0

@mqpasta: dijiste "Tenemos RowCount para establecer el número de registros a devolver o afectar". Supongo que "afectar" significaba eliminar, insertar, actualizar, etc. No hay configuración de nivel de base de datos: esa sería una de las cosas más estúpidas de la historia. Puede configurarlo por conexión con SET ROWCOUNT, pero esto tiene * problemas * como se indica y no logrará lo que desea correctamente – gbn

Cuestiones relacionadas