Sei sulla pagina 1di 8

DECLARE CURSOR (Transact-SQL)

Pgina 1 de 8

DECLARE CURSOR (Transact-SQL)


SQL Se r ve r 2 0 0 8 R2 Define los at ribut os de un cur sor de ser vidor de Transact - SQL, com o su com port am ient o de desplazam ient o y la consult a ut ilizada para generar el conj unt o de result ados sobre el que opera el cursor. DECLARE CURSOR acept a t ant o la sint axis basada en el est ndar I SO com o la sint axis que ut iliza un conj unt o de ex t ensiones de Transact - SQL. Convenciones de sint axis de Tr ansact - SQL1

Sintaxis
$% ! 2% ) . 3% 3) 4) 6% 3#2/ , , #523/ 2 #, . &/ 2 &/ 2 2% $ / . , 9 50$! 4% / & ! 4 $% ! 2% #523/ 2 , / #! , ' , / " ! , #, &/ 27! 2$/ . , 9 3#2/ , , 34! 4) # +% 4 $9. ! - ) # &! 34&/ 27! 2$ 93% 2% $/ . , 9 3#2/ , , , / #+3 / 04) - ) 34) # ! 490% 2. ) . ' 7! &/ 2 &/ 2 50$! 4% / &

Argumentos
cursor_nam e Es el nom br e del cursor de ser vidor de Transact - SQL definido. cursor_nam e debe cum plir las r eglas de los ident ificadores. Para obt ener m s inform acin sobre las reglas 2 de los ident ificador es, consult e Usar ident ificadores com o nom bres de obj et o . I NSENSI TI VE Define un cur sor que hace una copia t em poral de los dat os que ut iliza. Todas las solicit udes que se r ealizan al cursor se responden desde est a t abla t em poral de t e m pdb; por t ant o, las m odificaciones realizadas en las t ablas base no se reflej an en los dat os devuelt os por las oper aciones de capt ura realizadas en el cursor y adem s est e cursor no adm it e m odificaciones. Cuando se ut iliza la sint axis de I SO, si se om it e I NSENSI TI VE, las elim inaciones y act ualizaciones confirm adas realizadas en las t ablas subyacent es ( por cualquier usuario) se reflej an en capt uras post eriores. SCROLL Especifica que est n disponibles t odas las opciones de capt ura ( FI RST, LAST, PRI OR, NEXT, RELATI VE, ABSOLUTE) . Si no se especifica SCROLL en una inst ruccin DECLARE CURSOR de I SO, la nica opcin de capt ura que se adm it e es NEXT. No es posible especificar SCROLL si se incluye t am bin FAST_FORWARD. select _st at em ent

http://msdn.microsoft.com/es-pe/library/ms180169(d=printer).aspx

24/08/2011

DECLARE CURSOR (Transact-SQL)

Pgina 2 de 8

Es una inst ruccin SELECT est ndar que define el conj unt o de result ados del cursor. Las palabras clave COMPUTE, COMPUTE BY, FOR BROWSE e I NTO no est n perm it idas en la inst ruccin select _st at em ent de una declaracin de cursor. SQL Server convier t e im plcit am ent e el cursor a ot ro t ipo si las clusulas de la inst ruccin select _st at em ent ent ran en conflict o con la funcionalidad del t ipo de cursor 3 solicit ado. Para obt ener m s inform acin, vea Usar conversiones de cursor im plcit as . READ ONLY Evit a que se efect en act ualizaciones a t ravs de est e cursor. No es posible hacer referencia al cursor en una clusula WHERE CURRENT OF de una inst ruccin UPDATE o DELETE. Est a opcin r eem plaza la capacidad predet erm inada de act ualizar el cursor. UPDATE [ OF colum n_nam e [ ,...n] ] Define las colum nas act ualizables en el cursor. Si se especifica OF colum n_nam e [ ,...n] , slo las colum nas enum er adas adm it en m odificaciones. Si se especifica UPDATE sin indicar una list a de colum nas, se pueden act ualizar t odas las colum nas. cursor_nam e Es el nom br e del cursor de ser vidor de Transact - SQL definido. cursor_nam e debe cum plir las r eglas de los ident ificadores. Para obt ener m s inform acin sobre las reglas de los ident ificador es, vea Usar ident ificadores com o nom bres de obj et o 2 . LOCAL Especifica que el m bit o del cursor es local para el proceso por lot es, procedim ient o alm acenado o desencadenador en que se cre el cursor. El nom bre del cursor slo es vlido en est e m bit o. Se puede hacer referencia al cursor m ediant e v ariables de cursor locales en el proceso por lot es, procedim ient o alm acenado o desencadenador, o en el parm et ro OUTPUT de un pr ocedim ient o alm acenado. El parm et ro OUTPUT se ut iliza para devolver el cur sor local al proceso por lot es, procedim ient o alm acenado o desencadenador que realiza la llam ada, el cual puede asignar el parm et ro a una variable de cursor para hacer referencia al cursor despus de que el procedim ient o alm acenado finalice. La asignacin del cursor se cancela im plcit am ent e cuando el proceso por lot es, procedim ient o alm acenado o desencadenador finaliza, a m enos que el cursor se haya dev uelt o en un parm et ro OUTPUT. En ese caso, la asignacin del cursor se cancela cuando se cancela la asignacin de la lt im a variable que hace referencia al m ism o o cuando st a se sale del m bit o. GLOBAL Especifica que el m bit o del cursor es global para la conexin. Puede hacerse referencia al nom bre del cursor en cualquier procedim ient o alm acenado o proceso por lot es que se ej ecut e en la conexin. La asignacin del cursor slo se cancela im plcit am ent e cuando se produce la desconexin. N ot a Si no se especifica GLOBAL ni LOCAL, el valor predet erm inado se cont rola m ediant e la configuracin de la opcin de base de dat os de fa u lt t o loca l cur sor . En SQL Server versin 7.0, el valor pr edet erm inado de est a opcin es FALSE por com pat ibilidad con versiones ant eriores de SQL Server, en las que t odos los cursores eran globales. El valor pr edet erm inado de est a opcin puede cam biar en fut uras versiones de SQL Server. Par a obt ener m s inform acin, consult e Configurar las 4 opciones de la base de dat os .

http://msdn.microsoft.com/es-pe/library/ms180169(d=printer).aspx

24/08/2011

DECLARE CURSOR (Transact-SQL)

Pgina 3 de 8

FORWARD_ONLY Especifica que el cursor slo se puede desplazar de la prim era a la lt im a fila. FETCH NEXT es la nica opcin de capt ura adm it ida. Si se especifica FORWARD_ONLY sin las palabras clave STATI C, KEYSET o DYNAMI C, el cursor funciona com o un cursor DYNAMI C. Cuando no se especifica FORWARD_ONLY ni t am poco SCROLL, FORWARD_ONLY es la opcin pr edet erm inada, salvo que se especifiquen las palabras clave STATI C, KEYSET o DYNAMI C. Los cursores STATI C, KEYSET y DYNAMI C ut ilizan SCROLL com o valor predet erm inado. A diferencia de las API de base de dat os, com o ODBC y ADO, FORWARD_ONLY se puede ut ilizar con los cursores STATI C, KEYSET y DYNAMI C de Transact - SQL. STATI C Define un cur sor que hace una copia t em poral de los dat os que va a ut ilizar. Todas las solicit udes que se r ealizan al cursor se responden desde est a t abla t em poral de t e m pdb; por t ant o, las m odificaciones realizadas en las t ablas base no se reflej an en los dat os devuelt os por las oper aciones de capt ura realizadas en el cursor y adem s est e cursor no adm it e m odificaciones. KEYSET Especifica que la per t enencia y el orden de las filas del cursor se fij an cuando se abre el cursor. El conj unt o de clav es que ident ifica las filas de form a nica est int egrado en la t abla denom inada k e yse t de t e m pdb. N ot a Si la consult a hace r eferencia por lo m enos a una t abla sin un ndice nico, el cursor de conj unt o de claves se conviert e en cursor est t ico.

Los cam bios realizados en valores de las t ablas base que no son de clave, ya sean realizados por el pr opiet ar io del cursor o confirm ados por ot ros usuarios, son visibles cuando el pr opiet ar io se desplaza por el cursor. Las inserciones realizadas por ot ros usuarios no son visibles ( no es posible hacer inserciones a t ravs de un cursor de servidor de Transact - SQL) . Si se elim ina una fila, un int ent o para capt urar la fila devuelve un @@FETCH_STATUS de - 2. Las act ualizaciones de valores de clav e de fuera del cursor son sim ilar es a la elim inacin de la fila ant erior seguida por la insercin de la nueva fila. La fila con los nuevos valores no est visible, y los int ent os de capt urar la fila con los valores ant er iores devuelven un @@FETCH_STATUS de - 2. Los nuevos valores est n visibles si la act ualizacin se realiza a t ravs del cursor especificando la clusula WHERE CURRENT OF. DYNAMI C Define un cur sor que, al desplazarse por l, reflej a en su conj unt o de result ados t odos los cam bios r ealizados en los dat os de las filas. Los valores de los dat os, el orden y la pert enencia de las filas pueden cam biar en cada operacin de capt ura. La opcin de capt ura ABSOLUTE no se puede ut ilizar en los cursores dinm icos. FAST_FORWARD Especifica un cursor FORWARD_ONLY, READ_ONLY con las opt im izaciones de rendim ient o habilit adas. No se puede especificar FAST_FORWARD si se especifica t am bin SCROLL o FOR_UPDATE. N ot a

http://msdn.microsoft.com/es-pe/library/ms180169(d=printer).aspx

24/08/2011

DECLARE CURSOR (Transact-SQL)

Pgina 4 de 8

En SQL Ser ver 2000, las opciones de cursor FAST_FORWARD y FORWARD_ONLY se excluyen m ut uam ent e. Si se especifican am bas, se genera un error. En SQL Server 2005 y versiones post erior es, las dos palabras clave pueden usarse en la m ism a inst ruccin DECLARE CURSOR.

READ_ONLY Evit a que se efect en act ualizaciones a t ravs de est e cursor. No es posible hacer referencia al cursor en una clusula WHERE CURRENT OF de una inst ruccin UPDATE o DELETE. Est a opcin r eem plaza la capacidad predet erm inada de act ualizar el cursor. SCROLL_LOCKS Especifica que se garant iza que las act ualizaciones o elim inaciones posicionadas realizadas a t ravs del cursor sern correct as. SQL Server bloquea las filas cuando se leen en el cur sor par a gar ant izar que est arn disponibles para fut uras m odificaciones. No es posible especificar SCROLL_LOCKS si se especifica t am bin FAST_FORWARD o STATI C. OPTI MI STI C Especifica que las act ualizaciones o elim inaciones posicionadas realizadas a t ravs del cursor no se llevarn a cabo cor rect am ent e si la fila se ha act ualizado despus de ser leda en el cursor. SQL Server no bloquea las filas al leerlas en el cursor. En su lugar, ut iliza com paraciones de valores de colum na t im est am p o un valor de sum a de com probacin si la t abla no t iene colum nas t im est am p, para det erm inar si la fila se ha m odificado despus de leerla en el cursor. Si la fila se ha m odificado, el int ent o de act ualizacin o elim inacin posicionada genera un error. No es posible especificar OPTI MI STI C si se especifica t am bin FAST_FORWARD. TYPE_WARNI NG Especifica que se enva un m ensaj e de advert encia al client e si el cursor se conviert e im plcit am ent e del t ipo solicit ado a ot ro. select _st at em ent Es una inst ruccin SELECT est ndar que define el conj unt o de result ados del cursor. Las palabras clave COMPUTE, COMPUTE BY, FOR BROWSE e I NTO no est n perm it idas en la inst ruccin select _st at em ent de una declaracin de cursor. N ot a Puede ut ilizar una sugerencia de consult a en una declaracin de cursor; sin em bar go, si t am bin ut iliza la clusula FOR UPDATE OF, debe especificar OPTI ON ( quer y_hint ) despus de FOR UPDATE OF.
3

SQL Server convier t e im plcit am ent e el cursor a ot ro t ipo si las clusulas de la inst ruccin select _st at em ent ent ran en conflict o con la funcionalidad del t ipo de cursor solicit ado. Para obt ener m s inform acin, vea el t em a relat ivo a las conv ersiones de cursor im plcit as. FOR UPDATE [ OF colum n_nam e [ ,...n] ] Define las colum nas act ualizables en el cursor. Si se especifica OF colum n_nam e [ ,...n] , slo las colum nas enum er adas adm it en m odificaciones. Si se especifica UPDATE sin una list a de colum nas, se pueden act ualizar t odas las colum nas, a m enos que se haya especificado la opcin de sim ult aneidad READ_ONLY.

http://msdn.microsoft.com/es-pe/library/ms180169(d=printer).aspx

24/08/2011

DECLARE CURSOR (Transact-SQL)

Pgina 5 de 8

Comentarios
DECLARE CURSOR define los at r ibut os de un cursor de servidor de Transact - SQL, com o su com port am ient o de desplazam ient o y la consult a ut ilizada para generar el conj unt o de result ados sobr e el que opera el cursor. La inst ruccin OPEN llena el conj unt o de result ados y la inst ruccin FETCH devuelve una fila del conj unt o de result ados. La inst ruccin CLOSE libera el conj unt o de r esult ados act ual asociado al cursor. La inst ruccin DEALLOCATE libera los recursos que ut iliza el cursor . La prim era form a de la inst ruccin DECLARE CURSOR usa la sint axis de I SO para declarar com port am ient os del cursor . La segunda form a de DECLARE CURSOR ut iliza ext ensiones de Transact - SQL que perm it en definir cursores con los m ism os t ipos de cursor ut ilizados en las funciones de cursor de la API de base de dat os de ODBC o ADO. No se pueden com binar las dos form as. Si especifica las palabras clav e SCROLL o I NSENSI TI VE ant es de la palabra clave CURSOR, no puede usar ninguna palabra clave ent re las palabras clave CURSOR y FOR de la inst ruccin select _st at em ent . Si especifica palabras clave ent re las palabras clave CURSOR y FOR de la inst ruccin select _st at em ent , no puede especificar SCROLL o I NSENSI TI VE delant e de la palabra clave CURSOR. Si una inst ruccin DECLARE CURSOR con sint axis de Transact - SQL no especifica READ_ONLY, OPTI MI STI C o SCROLL_LOCKS, el valor predet erm inado es el siguient e: Si la inst ruccin SELECT no acept a act ualizaciones ( perm isos insuficient es, acceso a t ablas r em ot as que no acept an act ualizaciones, et c.) , el cursor es de t ipo READ_ONLY. El valor predet erm inado de los cursores de t ipo STATI C y FAST_FORWARD es READ_ONLY. El valor predet erm inado de los cursores de t ipo KEYSET y DYNAMI C es OPTI MI STI C. Slo se puede hacer r eferencia a nom bres de cursores m ediant e ot ras inst rucciones Transact SQL. No se puede hacer r efer encia a nom bres de cursores m ediant e funciones de la API de base de dat os. Por ej em plo, despus de declarar un cursor, no se puede hacer referencia al nom bre del cursor desde funciones o m t odos de OLE DB, ODBC o ADO. No se pueden capt urar las filas del cur sor con las funciones o m t odos de capt ura de las API ; las filas slo se pueden capt urar m ediant e inst rucciones FETCH de Transact - SQL. Una vez que se ha declar ado un cur sor, se pueden ut ilizar est os procedim ient os alm acenados del sist em a para det erm inar las car act erst icas del cursor.

Pr oce dim ie n t os a lm a ce n a dos de l sist e m a

D e scr ipcin

sp_ cur sor _ list

Devuelve la list a de los cursores que est n visibles act ualm ent e en la conexin y sus at ribut os. Describe los at ribut os de un cursor, por ej em plo si es de slo avance o de desplazam ient o. Describe los at ribut os de las colum nas en el conj unt o de result ados del cursor. Describe las t ablas base a las que t iene acceso el cursor.

sp_ de scr ibe _ cu r sor

sp_ de scr ibe _ cu r sor _ colu m n s

sp_ de scr ibe _ cu r sor _ t a ble s

http://msdn.microsoft.com/es-pe/library/ms180169(d=printer).aspx

24/08/2011

DECLARE CURSOR (Transact-SQL)

Pgina 6 de 8

Se pueden ut ilizar variables com o part e de la inst ruccin select _st at em ent que declara un cursor. Los valor es de las var iables de cursor no cam bian despus de que se declara el cursor. En SQL Server versin 6.5 y ant eriores, los valores de variable se act ualizan cada vez que se vuelve a abrir un cur sor .

Permisos
Los perm isos par a ut ilizar DECLARE CURSOR corresponden de m anera predet erm inada a los usuarios que dispongan de per m isos para ut ilizar SELECT en las vist as, t ablas y colum nas ut ilizadas en el cursor.

Ejemplos
A. Uso de cursores simples y su sintaxis
El conj unt o de r esult ados gener ado al abrir est e cursor cont iene t odas las filas y t odas las colum nas de la t abla. Se puede act ualizar est e cursor, y t odas las act ualizaciones y elim inaciones se represent an en las bsquedas realizadas para est e cursor. FETCHNEXT es la nica bsqueda disponible y a que no se ha especificado la opcin SCROLL. 53% ! 7 2 '/ $% ! 2% #, #523/ 2 / 0% . &% 4#( . % &2/ - 84

B. Uso de cursores anidados para elaborar resultados de informes


En el ej em plo siguient e se m uest ra cm o se pueden anidar los cursores para elaborar inform es com plej os. El cursor int erno se declara para cada proveedor. 53% ! 7 2 '/ 3% . / #/ 5. 4 / . 4 $% ! 2% #, 02) . 4 6 0 2 $% ! 2% #523/ 2 &/ 2 #, &2/ - 0 6 7( % 0 6 3 2% / 0% . &% 4#( . % &2/ - 84 ) . 4/ 7( ) , % &% 34! 453 4#( "%). ' 02) . 4 3% % 0 , #4 & 6

http://msdn.microsoft.com/es-pe/library/ms180169(d=printer).aspx

24/08/2011

DECLARE CURSOR (Transact-SQL)

Pgina 7 de 8

02) . 4 $ $% ! 2% #, #523/ 2 &/ 2 3% % . , #4 &2/ - 0 0 6 ! 3 ) . . % * / ) . 0 2 0 ! 3 / . 0 ) $ 0 ) $ ! . $

/ 0% . &% 4#( . % &2/ - 84 ) . 4/ ) & &% 34! 453 4#( 02) . 4 . 7( ) , % &% 34! 453 4#( "%). ' 3% % , #4 02) . 4 &% 4#( . % &2/ - 84 ) . 4/ % $ . #, / 3% $% , , / #! 4% ! ' &% 4#( . % &2/ - 84 ) . 4/

%$ . #, / 3% $% , , / #! 4% !

Vea tambin
Referencia @@FETCH_STATUS ( Transact - SQL) 5 6 CLOSE ( Transact - SQL) 7 Cursores ( Transact - SQL) DEALLOCATE ( Transact - SQL) 8 9 FETCH ( Transact - SQL) 10 SELECT ( Transact - SQL) 11 sp_configure ( Transact - SQL)

Tabla de vnculos
1 2 3 4 5

ht t p: / / m sdn.m icrosoft .com / es- pe/ libr ary/ m s177563.aspx ht t p: / / m sdn.m icrosoft .com / es- pe/ libr ary/ m s187879.aspx ht t p: / / m sdn.m icrosoft .com / es- pe/ libr ary/ m s190641.aspx ht t p: / / m sdn.m icrosoft .com / es- pe/ libr ary/ m s190249.aspx ht t p: / / m sdn.m icrosoft .com / es- pe/ libr ary/ m s187308.aspx

http://msdn.microsoft.com/es-pe/library/ms180169(d=printer).aspx

24/08/2011

DECLARE CURSOR (Transact-SQL)

Pgina 8 de 8

6 7 8 9

ht t p: / / m sdn.m icrosoft .com / es- pe/ libr ary/ m s175035.aspx ht t p: / / m sdn.m icrosoft .com / es- pe/ libr ary/ m s181441.aspx ht t p: / / m sdn.m icrosoft .com / es- pe/ libr ary/ m s188782.aspx ht t p: / / m sdn.m icrosoft .com / es- pe/ libr ary/ m s180152.aspx ht t p: / / m sdn.m icrosoft .com / es- pe/ library/ m s189499.aspx ht t p: / / m sdn.m icrosoft .com / es- pe/ library/ m s188787.aspx

10 11

Contenido de la comunidad
2011 Microsoft . Reservados t odos los derechos.

http://msdn.microsoft.com/es-pe/library/ms180169(d=printer).aspx

24/08/2011

Potrebbero piacerti anche