Está en la página 1de 14

SQL Server 2016

Sesión 8
Resumen del curso

Sesión 1 Sesión 6
• Introducción a SQL Server 2016 • Uso de Funciones de Ventana
• Introducción a T-SQL • Consulta con PIVOT, UNPIVOT
• Consultas con SELECT, CASE, DISTINCT Sesión 7
Sesión 2 • Ejecución de Procedimientos Almacenados
• Consultas con JOINS • Programación con T-SQL
• Consultas con WHERE, TOP y ORDER BY Sesión 8
Sesión 3 • Implementación de Gestión de Errores
• Tipos de Datos en SQL Server 2016 • Manejo Transacciones
• Uso de Sentencias DML
Sesión 4
• Uso de Funciones
• Consultas con GROUP BY, HAVING
• Uso de Subconsultas
Sesión 5
• Uso de VIEW, CTE, Inline TVFs, Tablas Derivadas
• Uso de UNION, INTERSECT, APPLY, EXCEPT
Resumen de la Sesión

• TRY … CATCH
• ISOLATION LEVELS
• TRANSACTIONS (BEGIN, COMMIT, ROLLBACK)
Manejo de Errores

Al usar el lenguaje Transact-SQL debemos tener en cuenta, como en cualquier


lenguaje de programación, que algunas instrucciones nos pueden dar errores.

Con manejo de errores nosotros tenemos la oportunidad de hacer algo al respecto.


TRY…CATCH

BEGIN TRY
--code to try
END TRY
BEGIN CATCH
--code to run if error occ
urs
--is generated in try
END CATCH
CATCH

• ERROR_NUMBER – Devuelve el número interno del error.


• ERROR_STATE – Devuelve la información sobre la fuente
• ERROR_SEVERITY – Devuelve la información sobre cualquier cosa,
desde errores informativos hasta errores que el usuario de DBA puede
corregir, etc.
• ERROR_LINE – Devuelve el número de línea en el que ocurrió un error
• ERROR_PROCEDURE – Devuelve el nombre del procedimiento
almacenado o la función
• ERROR_MESSAGE – Devuelve la información más esencial y ese es el
mensaje de texto del error
Ejemplo

• Los parámetros de salida también son indicados en la cabecera.


• Ejemplo: USE AdventureWorks2014
GO
-- Basic example of TRY...CATCH

BEGIN TRY
-- Generate a divide-by-zero error
SELECT 1 / 0 AS Error;
END TRY
BEGIN CATCH
SELECT
ERROR_NUMBER() AS ErrorNumber,
ERROR_STATE() AS ErrorState,
ERROR_SEVERITY() AS ErrorSeverity
,
ERROR_PROCEDURE() AS ErrorProc
edure,
ERROR_LINE() AS ErrorLine,
ERROR_MESSAGE() AS ErrorMessag
e;
END CATCH;
Niveles de Seguridad de error
Nivel de gravedad Descripción
Mensajes informativos que devuelven información de estado o informan sobre errores que no son graves. El Motor
0-9
de base de datos no muestra errores del sistema con gravedades de 0 a 9.
Mensajes informativos que devuelven información de estado o informan sobre errores que no son graves. Por
10 razones de compatibilidad, el Motor de base de datos convierte la gravedad 10 en gravedad 0 antes de devolver la
información de errores a la aplicación que hace la llamada.
Indica errores que pueden ser corregidos por el usuario.
11 -16
Indica que un objeto o una entidad determinados no existen.
11
Una gravedad especial para consultas que no utilizan bloqueo debido a sugerencias de consulta especiales. En
12 algunos casos, las operaciones de lectura realizadas por estas instrucciones podrían producir datos incoherentes, ya
que no se adoptan bloqueos para garantizar la coherencia.
Indica errores de interbloqueo de transacciones.
13
Indica errores relacionados con la seguridad, como es el caso de permisos denegados.
14
Indica errores de sintaxis en el comando Transact-SQL .
15
Mensajes informativos que devuelven información de estado o informan sobre errores que no son graves. El Motor
16
de base de datos no muestra errores del sistema con gravedades de 0 a 9.
Indica que la instrucción ha hecho que SQL Server se quede sin recursos (como, por ejemplo, memoria, bloqueos o
17 espacio en disco para la base de datos) o ha superado alguno de los límites establecidos por el administrador del
sistema.
Indica un problema en el software de Motor de base de datos pero la instrucción completa su ejecución y la conexión
18 con la instancia del Motor de base de datos se mantiene. El administrador del sistema debe ser informado cada vez
que se produce un mensaje con un nivel de gravedad 18.
Niveles de Seguridad de error
Nivel de gravedad Descripción
Indica que se ha superado un límite de Motor de base de datos no configurable y el proceso por lotes actual ha
finalizado.Los mensajes de error con nivel de gravedad 19 o superior detienen la ejecución del lote actual. Los
errores de nivel de gravedad 19 son poco frecuentes y deben ser corregidos por el administrador del sistema o por
19
el proveedor principal de asistencia técnica. Póngase en contacto con el administrador del sistema cuando se
produzca un mensaje con nivel de gravedad 19. Los mensajes de error con nivel de gravedad entre 19 y 25 se
escriben en el registro de errores.
Indica problemas del sistema y son errores irrecuperables, lo que significa que ya no está en ejecución la tarea
de Motor de base de datos que esté ejecutando una instrucción o lote. La tarea registra información sobre lo
acontecido y, a continuación, finaliza. En la mayoría de los casos, puede que también finalice la conexión de la
aplicación a la instancia delMotor de base de datos . Si esto ocurre, dependiendo del problema, la aplicación podría
20-24
no conseguir volver a conectarse.
Los mensajes de error incluidos en este intervalo pueden afectar a todos los procesos que tienen acceso a los
datos de la misma base de datos y pueden indicar que una base de datos u objeto está dañado. Los mensajes de
error con nivel de gravedad entre 19 y 24 se escriben en el registro de errores.
Indica que una instrucción ha encontrado un problema. Puesto que el problema ha afectado solo a la tarea actual,
20
no es probable que la propia base de datos haya sido dañada.
Indica que se ha encontrado un problema que afecta a todas las tareas de la base de datos actual, pero es poco
21
probable que se haya dañado la base de datos.
Niveles de Seguridad de error
Nivel de gravedad Descripción
Indica que la tabla o índice especificado en el mensaje ha sido dañado por un problema de software o hardware.
Los errores de nivel de gravedad 22 se producen en raras ocasiones. Si se produce uno de ellos, ejecute DBCC
CHECKDB para determinar si hay otros objetos de la base de datos dañados. Es posible que el problema se
encuentre solo en la caché del búfer y no en el propio disco. Si es así, al reiniciar la instancia del Motor de base de
datos se corregirá el problema. Para seguir trabajando, deberá volver a conectarse a la instancia del Motor de base
22 de datos; en caso contrario, utilice DBCC para solucionar el problema. En algunas ocasiones, puede que tenga que
restaurar la base de datos.
Si al reiniciar la instancia del Motor de base de datos no se corrige el problema, el problema estará en el
disco. Algunas veces se puede resolver si se destruye el objeto especificado en el mensaje de error. Por ejemplo, si
el mensaje le indica que la instancia del Motor de base de datos ha encontrado una fila con longitud 0 en un índice
no clúster, elimine el índice y vuelva a generarlo.
Indica que se sospecha de la integridad de toda la base de datos debido al daño causado por un problema de
hardware o software.
Los errores de nivel de gravedad 23 se producen en raras ocasiones. Si se produce alguno, ejecute DBCC
23 CHECKDB para determinar la magnitud de los daños. Es posible que el problema se encuentre solo en la caché y
no en el propio disco. Si es así, al reiniciar la instancia del Motor de base de datos se corregirá el problema. Para
seguir trabajando, deberá volver a conectarse a la instancia del Motor de base de datos; en caso contrario, utilice
DBCC para solucionar el problema. En algunas ocasiones, puede que tenga que restaurar la base de datos.
Indica un error en los medios. Puede que el administrador del sistema tenga que restaurar la base de datos. Puede
24
que también tenga que llamar al distribuidor de hardware.
Mensajes de Error

select * from sys.messages


Isolation Level
Transactions

• BEGIN, COMMIT, ROLLBACK

UPDATE HumanResources.Employee
SET JobTitle = ‘DBA’
WHERE LoginID IN (
SELECT LoginID FROM HumanResources.Employee)

También podría gustarte