2011-03-21 9 views
5

Estoy usando "Establecer RowCount" en mis procedimientos almacenados. Tengo una pregunta, ¿cuál es el alcance de Set RowCount? Considere los siguientes SPAlcance de "Establecer recuento de filas" en SQL

CREATE PROC Test 
    AS 
     BEGIN 

      SET ROWCOUNT 10 
      ........... 

      SET ROWCOUNT 0 

     END 


CREATE PROC Test2 
AS 
    BEGIN 


     ........... 

     SET ROWCOUNT 0 

    END 


CREATE PROC Test3 
AS 
    BEGIN 

     SET ROWCOUNT 10 
     ........... 


    END 


CREATE PROC Test4 
AS 
    BEGIN 

     SET ROWCOUNT 10 
     SET ROWCOUNT 5 
     ........... 
     SET ROWCOUNT 0  

    END 

Ahora en los SP anteriores, debe estar viendo He cargado no coincide declaraciones SetRowcount. Así que mi pregunta es si olvidé agregar "Establecer RowCount 0" a mi declaración de apertura "Establecer RowCount N". ¿Es necesario? ¿Afectará las ejecuciones del resto de los SP en mi aplicación?

+0

ha visto http://stackoverflow.com/questions/468764/top-versus-set-rowcount – Beth

+0

Parece afectar lotes niño, sino poner a cero al salir de una prueba rápida. –

+0

@Martin ¿Puede borrarme de "pero debe restablecer al salir de una prueba rápida"? –

Respuesta

5

Contrariamente a la accepted answer in the question linked to in the comments por lo que puedo ver, las reglas de alcance son exactamente las mismas que las de la visibilidad de la tabla #temp. Se propaga a lotes secundarios, pero cuando el lote sale, se restablece al valor anterior.

CREATE PROC#bar 
AS 
SELECT * FROM sys.objects 
EXEC ('SELECT * FROM sys.objects') 
GO 

CREATE PROC#foo 
AS 
SET ROWCOUNT 1 

EXEC#bar 
GO 

SET ROWCOUNT 4 
EXEC#foo /*Returns 2 resultsets with 1 row*/ 
EXEC#bar /*Returns 2 resultsets with 4 rows*/ 

DROP PROC#foo 
DROP PROC#bar 
Cuestiones relacionadas