SQL SERVER Flashcards
¿Qué es un Cursor?
Un cursor consiste en cargar un conjunto de datos en la memoria RAM, y luego recorrerlo o navegar a través de el mediante un puntero.
En cuanto al rendimiento, ¿Son los Cursores eficientes?
Las soluciones basadas en cursores son menos eficientes que las que se basan en conjunto de datos, ya que SQL está preparado para trabajar con el conjunto de datos y con los cursores lo que estamos haciendo es recorrer los registros uno a uno de forma secuencial. Por este motivo los cursores se deben usar con precaución.
¿Cuáles son los ámbitos o alcance de declaración de un cursor?
El ámbito de aplicación o el alcance de un cursor puede global o local
¿Qué significa que el alcance de un cursor sea Global?
Especifica que el cursor estará disponible de manera global para la conexión actual.
¿Qué significa que el alcance de un cursor sea Local?
Esto quiere decir que el cursor solo estará disponible para el procedimiento almacenado, disparador, o consulta que contiene dicho cursor.
¿Qué significa la forma de recuperación forward_only?
Significa que sólo se puede avanzar o desplazar desde la primera hasta la última fila, es decir no se puede retroceder.
¿En un Cursor, qué significa la forma de recuperación scroll?
Significa que nos podemos mover de distinta forma por el cursor, específicamente tenemos las siguientes opciones para recuperar los datos:
- First: Se obtiene el primer registro
- Last: Se obtiene el último registro
- Next: Se obtiene el siguiente registro
- Prior : Se obtiene el anterior registro
- Relative
- Abosolute
¿Cuáles son los tipos de cursores que se pueden declarar, y explique su significado?
Se pueden declarar cuatro tipos de cursores:
- Static: este cursor llena el conjunto de resultados durante la creación del cursor y el resultado de la consulta se almacena en caché durante la vida útil del cursor. Un cursor static puede moverse hacia adelante y hacia atrás
- Fast_forward: Es el tipo de curso predeterminado, es igual a un cursor static pero con la diferencia de que sólo se puede mover hacia adelante
- Dinamic: En un cursor dinámico las adiciones y eliminaciones son visibles para otros en la fuente de datos mientras el cursor esté abierto.
- Keyset: es similar a un cursor dinámico, excepto que no podemos ver registros que otros agreguen. Si otro usaurio elimina un registro, es inaccesible desde nuestro conjunto de registros.
¿Enumera y explique los tipos de bloqueos de un cursor?
Un cursor puede tener los siguientes tipos de bloqueos contra las filas
- Read_only: Especifica que el cursor no se puede actualizar
- scroll_locks: Proporciona integridad de datos en el cursor. Especifica que el cursor bloqueará las filas a medida que se leen en el cursor para garantizar que las actualizaciones o eliminaciones realizadas con el cursor tengan éxito
- Optimistic: Especifica que el cursor no bloquea las filas a medida que se leen. Por tanto las actualizaciones o eliminaciones realizadas con el cursor no tendrán éxito si la fila se ha modificado fuera del cursor.
¿Qué son los bloqueos?
Un bloqueo es un proceso por el cual un sistema gestor de bases de datos restringe el acceso a una fila en un entorno multiusuario. Cuando una fila o columna se bloquea exclusivamente, otros usuarios no pueden acceder a los datos bloqueados hasta que se libere el bloqueo. Se utiliza para la integridad de los datos.
¿Cuál es la sintaxis de declaración de un cursor?
Declare CURSOR [LOCAL | GLOBAL] [FORWARD_ONLY | SCROLL] [STATIC | KEYSET | DYNBAMIC | FAST_FORWARD] [READ_ONLY | SCROLL_LOCKS | OPTIMISTIC] [TYPE_WARNING] for [FOR UPDATE [OF [,... N]]][;]
Enumere los pasos que hay que realizar para usar un cursor
- Declaración del cursor: declare cursor1 CURSOR for selec * from custumer
- Abrir el cursor: Open cursor1
- Navegar por el cursor: fetch first from cursor1
- Cerrar el cursor: close cursor1
- Desalojar de la memoria: deallocate cursor1
¿Cuál es la variable del sistema que nos indica si un puntero está apuntando a un registro de un cursor?
@@FETCH_STATUS=0
Con esta variable, si vale cero sabemos que el puntero está apuntando a un registro del cursor, se usa para las iteraciones de un while.
¿Qué es una variable de Tabla?
Es una variable de SQL que almacena datos en forma tabla temporal. Las variables de tabla residen en la base de datos tempDB de forma muy similar a las tablas temporales de SQL Server locales.
Las variables de tabla solo son accesibles dentro de la sesión que las creo, no obstante solo se puede tratar de acceder a la variable de tabla dentro del lote actual, no son visibles fiera del lote, lo que significa que el concepto de jerarquía de sesión puede ignorarse de alguna manera.
Respecto al rendimiento, ¿Cómo funcionan las variables de tabla respecto a las tablas temporales?
Una variable de tabla es optima cuando se van a tratar pequeñas cantidades de datos, de lo contrario es más útil usar tablas temporales