{"id":645,"date":"2017-08-04T23:46:34","date_gmt":"2017-08-04T23:46:34","guid":{"rendered":"http:\/\/www.manualsqlserver.com\/?p=645"},"modified":"2020-05-20T18:16:04","modified_gmt":"2020-05-20T18:16:04","slug":"controlando-errores-en-sql-server","status":"publish","type":"post","link":"https:\/\/manualsqlserver.com\/?p=645","title":{"rendered":"Controlando Errores en SQL Server"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"220\" height=\"252\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_FuncionesErrores_D.png\" alt=\"\" class=\"wp-image-1320\"\/><\/figure>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>Manejando errores en SQL Server<\/strong><\/h1>\n\n\n\n<p>Al usar el lenguage Transact-SQL debemos tener en cuenta, como en cualquier lenguaje de programaci\u00f3n, que algunas instrucciones nos pueden dar errores debido a los valores de par\u00e1metros de entrada incorrectos o faltantes, ingresos de datos con tipos incorrectos, falta de datos en un procedimiento o funci\u00f3n definida por el usuario o de manera general en una transacci\u00f3n no finalizada de manera correcta.<\/p>\n\n\n\n<!--more-->\n\n\n\n<script async src=\"\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js\"><\/script>\n<ins class=\"adsbygoogle\"\n     style=\"display:block; text-align:center;\"\n     data-ad-layout=\"in-article\"\n     data-ad-format=\"fluid\"\n     data-ad-client=\"ca-pub-2636008503986218\"\n     data-ad-slot=\"1902193434\"><\/ins>\n<script>\n     (adsbygoogle = window.adsbygoogle || []).push({});\n<\/script>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Funciones para el manejo de errores<\/strong><\/h2>\n\n\n\n<p>Las funciones para el manejo de errores permiten conocer los par\u00e1metros&nbsp;que reporta un error, las funciones son las siguientes:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td><strong>Funci\u00f3n<\/strong><\/td><td><strong>Descripci\u00f3n<\/strong><\/td><\/tr><tr><td>ERROR_NUMBER()<\/td><td>Devuelve el n\u00famero de error.<\/td><\/tr><tr><td>ERROR_SEVERITY()<\/td><td>Devuelve la severidad del error.<\/td><\/tr><tr><td>ERROR_STATE()<\/td><td>Devuelve el estado del error.<\/td><\/tr><tr><td>ERROR_PROCEDURE()<\/td><td>Devuelve el nombre del procedimiento almacenado que ha provocado el error.<\/td><\/tr><tr><td>ERROR_LINE()<\/td><td>Devuelve el n\u00famero de l\u00ednea en el que se ha producido el error.<\/td><\/tr><tr><td>ERROR_MESSAGE()<\/td><td>Devuelve el mensaje de error.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p><strong>Ejemplo<\/strong><br><strong>El siguiente ejemplo muestra una divisi\u00f3n entre CERO, lo que arroja error, luego se muestran los valores de cada funci\u00f3n. Se utiliza la estructura Try Catch cuya explicaci\u00f3n est\u00e1 al final de este art\u00edculo.<\/strong><\/p>\n\n\n\n<p>BEGIN TRY<br>DECLARE @Valor1 Numeric(9,2),@Valor2 Numeric(9,2), @Division Numeric(9,2)<br>SET @Valor1 = 100<br>SET @Valor2 = 0<br>SET @Division = @Valor1\/@Valor2<br>PRINT &#8216;La divisi\u00f3n no reporta error&#8217;<br>END TRY<br>BEGIN CATCH<br>select ERROR_NUMBER() As &#8216;N\u00ba de Error&#8217;, ERROR_SEVERITY() As &#8216;Severidad&#8217;,<br>ERROR_STATE() As &#8216;Estado&#8217;, ERROR_PROCEDURE() As &#8216;Procedimiento&#8217;, ERROR_LINE() As &#8216;N\u00ba l\u00ednea&#8217;,<br>ERROR_MESSAGE() As &#8216;Mensaje&#8217;<br>END CATCH<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_Errores_00.png\" alt=\"\" class=\"wp-image-1321\" width=\"833\" height=\"132\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_Errores_00.png 860w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_Errores_00-300x47.png 300w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_Errores_00-768x121.png 768w\" sizes=\"auto, (max-width: 833px) 100vw, 833px\" \/><\/figure><\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>La Funci\u00f3n @@ERROR<\/strong><\/h3>\n\n\n\n<p>La funci\u00f3n @@ERROR almacena el n\u00famero de error producido por la \u00faltima sentencia Transact SQL ejecutada, si no se ha producido ning\u00fan error el valor de la funci\u00f3n es CERO.<br>Se puede usar esta funci\u00f3n para controlar los errores usando una estructura If<\/p>\n\n\n\n<p><strong>Ejemplo:<\/strong><br><strong>El siguiente ejemplo muestra una divisi\u00f3n entre CERO, lo que arroja error, luego se da consistencia al error con una estructura If<\/strong><\/p>\n\n\n\n<p>DECLARE @Valor1 Numeric(9,2),@Valor2 Numeric(9,2), @Division Numeric(9,2)<br>SET @Valor1 = 100<br>SET @Valor2 = 0<br>SET @Division = @Valor1\/@Valor2<br>If @@ERROR = 0<br>Begin<br>Print &#8216;El resultado es: &#8216; + Str(@Division)<br>Print &#8216;No hubo error&#8217;<br>End<br>Else<br>Begin<br>Print &#8216;Error al dividir entre CERO&#8217;<br>End<br>go<\/p>\n\n\n\n<p><strong>Probamos el mismo c\u00f3digo con el Valor2 igual a 2<\/strong><\/p>\n\n\n\n<p>DECLARE @Valor1 Numeric(9,2),@Valor2 Numeric(9,2), @Division Numeric(9,2)<br>SET @Valor1 = 100<br>SET @Valor2 = 2<br>SET @Division = @Valor1\/@Valor2<br>If @@ERROR = 0<br>Begin<br>Print &#8216;El resultado es: &#8216; + Str(@Division)<br>Print &#8216;No hubo error&#8217;<br>End<br>Else<br>Begin<br>Print &#8216;Error al dividir entre CERO&#8217;<br>End<br>go<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Niveles de severidad del error<\/strong><\/h3>\n\n\n\n<p>Al cometer alg\u00fan error en SQL Server se presentan mensajes dentro de los cuales aparece el nivel de severidad del mismo, en esta tabla se presentan los 25 diferentes niveles de gravedad del error.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><td><strong>Nivel de gravedad<\/strong><\/td><td><strong>Descripci\u00f3n<\/strong><\/td><\/tr><\/thead><tbody><tr><td>0-9<\/td><td>Mensajes informativos que devuelven informaci\u00f3n de estado o informan sobre errores que no son graves.&nbsp;El&nbsp;Motor de base de datos&nbsp;no muestra errores del sistema con gravedades de 0 a 9.<\/td><\/tr><tr><td>10<\/td><td>Mensajes informativos que devuelven informaci\u00f3n de estado o informan sobre errores que no son graves.&nbsp;Por razones de compatibilidad, el&nbsp;Motor de base de datos&nbsp;convierte la gravedad 10 en gravedad 0 antes de devolver la informaci\u00f3n de errores a la aplicaci\u00f3n que hace la llamada.<\/td><\/tr><tr><td>11-16<\/td><td>Indica errores que pueden ser corregidos por el usuario.<\/td><\/tr><tr><td>11<\/td><td>Indica que un objeto o una entidad determinados no existen.<\/td><\/tr><tr><td>12<\/td><td>Una gravedad especial para consultas que no utilizan bloqueo debido a sugerencias de consulta especiales.&nbsp;En algunos casos, las operaciones de lectura realizadas por estas instrucciones podr\u00edan producir datos incoherentes, ya que no se adoptan bloqueos para garantizar la coherencia.<\/td><\/tr><tr><td>13<\/td><td>Indica errores de interbloqueo de transacciones.<\/td><\/tr><tr><td>14<\/td><td>Indica errores relacionados con la seguridad, como es el caso de permisos denegados.<\/td><\/tr><tr><td>15<\/td><td>Indica errores de sintaxis en el comando&nbsp;Transact-SQL&nbsp;.<\/td><\/tr><tr><td>16<\/td><td>Indica errores generales que pueden ser corregidos por el usuario.<\/td><\/tr><tr><td>17-19<\/td><td>Indica errores de software que no pueden ser corregidos por el usuario.&nbsp;Informe al administrador del sistema sobre el problema.<\/td><\/tr><tr><td>17<\/td><td>Indica que la instrucci\u00f3n ha hecho que&nbsp;SQL Server&nbsp;se quede sin recursos (como, por ejemplo, memoria, bloqueos o espacio en disco para la base de datos) o ha superado alguno de los l\u00edmites establecidos por el administrador del sistema.<\/td><\/tr><tr><td>18<\/td><td>Indica un problema en el software de&nbsp;Motor de base de datos&nbsp;pero la instrucci\u00f3n completa su ejecuci\u00f3n y la conexi\u00f3n con la instancia del&nbsp;Motor de base de datos&nbsp;se mantiene.&nbsp;El administrador del sistema debe ser informado cada vez que se produce un mensaje con un nivel de gravedad 18.<\/td><\/tr><tr><td>19<\/td><td>Indica que se ha superado un l\u00edmite de&nbsp;Motor de base de datos&nbsp;no configurable y el proceso por lotes actual ha finalizado.Los mensajes de error con nivel de gravedad 19 o superior detienen la ejecuci\u00f3n del lote actual.&nbsp;Los errores de nivel de gravedad 19 son poco frecuentes y deben ser corregidos por el administrador del sistema o por el proveedor principal de asistencia t\u00e9cnica.&nbsp;P\u00f3ngase en contacto con el administrador del sistema cuando se produzca un mensaje con nivel de gravedad 19.&nbsp;Los mensajes de error con nivel de gravedad entre 19 y 25 se escriben en el registro de errores.<\/td><\/tr><tr><td>20-24<\/td><td>Indica problemas del sistema y son errores irrecuperables, lo que significa que ya no est\u00e1 en ejecuci\u00f3n la tarea de&nbsp;Motor de base de datos&nbsp;que est\u00e9 ejecutando una instrucci\u00f3n o lote.&nbsp;La tarea registra informaci\u00f3n sobre lo acontecido y, a continuaci\u00f3n, finaliza.&nbsp;En la mayor\u00eda de los casos, puede que tambi\u00e9n finalice la conexi\u00f3n de la aplicaci\u00f3n a la instancia delMotor de base de datos&nbsp;.&nbsp;Si esto ocurre, dependiendo del problema, la aplicaci\u00f3n podr\u00eda no conseguir volver a conectarse.\n<p>&nbsp;<\/p>\n<p>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\u00e1 da\u00f1ado.&nbsp;Los mensajes de error con nivel de gravedad entre 19 y 24 se escriben en el registro de errores.<\/p>\n<\/td><\/tr><tr><td>20<\/td><td>Indica que una instrucci\u00f3n ha encontrado un problema.&nbsp;Puesto que el problema ha afectado solo a la tarea actual, no es probable que la propia base de datos haya sido da\u00f1ada.<\/td><\/tr><tr><td>21<\/td><td>Indica que se ha encontrado un problema que afecta a todas las tareas de la base de datos actual, pero es poco probable que se haya da\u00f1ado la base de datos.<\/td><\/tr><tr><td>22<\/td><td>Indica que la tabla o \u00edndice especificado en el mensaje ha sido da\u00f1ado por un problema de software o hardware.\n<p>&nbsp;<\/p>\n<p>Los errores de nivel de gravedad 22 se producen en raras ocasiones.&nbsp;Si se produce uno de ellos, ejecute DBCC CHECKDB para determinar si hay otros objetos de la base de datos da\u00f1ados.&nbsp;Es posible que el problema se encuentre solo en la cach\u00e9 del b\u00fafer y no en el propio disco.&nbsp;Si es as\u00ed, al reiniciar la instancia del&nbsp;Motor de base de datos&nbsp;se corregir\u00e1 el problema.&nbsp;Para seguir trabajando, deber\u00e1 volver a conectarse a la instancia del&nbsp;Motor de base de datos; en caso contrario, utilice DBCC para solucionar el problema.&nbsp;En algunas ocasiones, puede que tenga que restaurar la base de datos.<\/p>\n<p>Si al reiniciar la instancia del&nbsp;Motor de base de datos&nbsp;no se corrige el problema, el problema estar\u00e1 en el disco.&nbsp;Algunas veces se puede resolver si se destruye el objeto especificado en el mensaje de error.&nbsp;Por ejemplo, si el mensaje le indica que la instancia del&nbsp;Motor de base de datos&nbsp;ha encontrado una fila con longitud 0 en un \u00edndice no cl\u00faster, elimine el \u00edndice y vuelva a generarlo.<\/p>\n<\/td><\/tr><tr><td>23<\/td><td>Indica que se sospecha de la integridad de toda la base de datos debido al da\u00f1o causado por un problema de hardware o software.\n<p>&nbsp;<\/p>\n<p>Los errores de nivel de gravedad 23 se producen en raras ocasiones.&nbsp;Si se produce alguno, ejecute DBCC CHECKDB para determinar la magnitud de los da\u00f1os.&nbsp;Es posible que el problema se encuentre solo en la cach\u00e9 y no en el propio disco.&nbsp;Si es as\u00ed, al reiniciar la instancia del&nbsp;Motor de base de datos&nbsp;se corregir\u00e1 el problema.&nbsp;Para seguir trabajando, deber\u00e1 volver a conectarse a la instancia del&nbsp;Motor de base de datos; en caso contrario, utilice DBCC para solucionar el problema.&nbsp;En algunas ocasiones, puede que tenga que restaurar la base de datos.<\/p>\n<\/td><\/tr><tr><td>24<\/td><td>Indica un error en los medios.&nbsp;Puede que el administrador del sistema tenga que restaurar la base de datos.&nbsp;Puede que tambi\u00e9n tenga que llamar al distribuidor de hardware.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Mensajes de error<\/strong><\/h3>\n\n\n\n<p>SQL Server tienen una vista de cat\u00e1logo con los mensajes definidos por defecto, la vista es <strong>sys.messages<\/strong>, a la cual se le pueden a\u00f1adir mensajes de error con sus par\u00e1metros respectivos usando el procedimiento almacenado <strong>sp_addmessage<\/strong>.<\/p>\n\n\n\n<p>El procedimiento almacenado sp_addmessage permite agregar a la vista de cat\u00e1logo sys.messages mensajes de error definidos por el usuario con niveles de gravedad de 1 a 25. Use Raiserror para utilizar los mensajes de error definidos por el usuario.<\/p>\n\n\n\n<p>RAISERROR puede hacer referencia a un mensaje de error definidos por el usuario almacenados en la vista de cat\u00e1logo sys.messages o<br>puede generar un mensaje din\u00e1micamente. Si se usa el mensaje de error definido por el usuario de sys.messages mientras se genera un error, la gravedad especificada por RAISERROR reemplazar\u00e1 a la gravedad especificada en sys.messages.<\/p>\n\n\n\n<p>Para visualizar los mensajes de la vista de cat\u00e1logo Sys.messages puede ejecutar la siguiente instrucci\u00f3n.<\/p>\n\n\n\n<p><strong>select * from sys.messages<\/strong><br><strong>go<\/strong><\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_Errores_01-1024x443.png\" alt=\"\" class=\"wp-image-1322\" width=\"839\" height=\"363\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_Errores_01-1024x443.png 1024w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_Errores_01-300x130.png 300w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_Errores_01-768x332.png 768w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_Errores_01.png 1226w\" sizes=\"auto, (max-width: 839px) 100vw, 839px\" \/><\/figure><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">El procedimiento sp_addmessage<\/h3>\n\n\n\n<p>Permite agregar un mensaje de error definido por el usuario a la vista de cat\u00e1logo sys.messages<\/p>\n\n\n\n<p><strong>Sintaxis:<\/strong><\/p>\n\n\n\n<p>sp_addmessage [ @msgnum= ] msg_id , [ @severity= ] severidad , [ @msgtext= ] &#8216;mensaje&#8217;<br>[ , [ @lang= ] &#8216;languaje&#8217; ]<\/p>\n\n\n\n<p><strong>Donde:<\/strong><br><strong>[ @msgnum= ] msg_id<\/strong> Especifica el Id del mensaje, se pueden iniciar en 50001, el valor m\u00e1ximo es 2,147,483,647.<br><strong>[ @severity= ] severidad<\/strong> Indica el nivel de gravedad del error, puede ser un valor entre 1 y 25.<br><strong>[ @msgtext= ] &#8216;mensaje<\/strong>&#8216; Especifica el mensaje definido por el usuario.<br><strong>[ @lang= ] &#8216;languaje&#8217;<\/strong> Especifica el lenguaje.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Ejemplos:<\/strong><\/h2>\n\n\n\n<p><strong>Ejercicio 1<\/strong><br><strong>Agregar el mensaje para indicar que un porcentaje de descuento puede ser entre 0 y 25%.<\/strong><br><strong>Note que es necesario insertar el mensaje para el idioma ingl\u00e9s y as\u00ed poder agregar el mensaje&nbsp;para espa\u00f1ol.<\/strong><\/p>\n\n\n\n<p>Use master<br>go<br>Execute sp_addmessage 50001, 16, &#8216;The discount percentage should be between 0 and 25%&#8217;, &#8216;us_english&#8217; , false, replace<br>Execute sp_addmessage 50001, 16, &#8216;El porcentaje de descuento debe ser entre 0 y 25%&#8217;, &#8216;Spanish&#8217; , false, replace<br>go<\/p>\n\n\n\n<p><strong>Ejercicio 2<\/strong><br><strong>Agregar el mensaje para indicar que un precio debe ser CERO o mayor.<\/strong><br><strong>Note que es necesario insertar el mensaje para el idioma ingl\u00e9s y as\u00ed poder agregar el mensaje para espa\u00f1ol.<\/strong><\/p>\n\n\n\n<p>Use master<br>go<br>Execute sp_addmessage 50002, 16,<br>&#8216;The price should be 0 or greater&#8217;, &#8216;us_english&#8217; , false, replace<br>Execute sp_addmessage 50002, 16,<br>&#8216;El precio debe ser 0 o mayor&#8217;, &#8216;Spanish&#8217; , false, replace<br>go<\/p>\n\n\n\n<p><strong>Procedimientos almacenados para los mensajes de error definidos por el usuario<\/strong><\/p>\n\n\n\n<p><strong>Procedimiento almacenado sp_altermessage<\/strong><\/p>\n\n\n\n<p>Modifica el estado de los mensajes definidos por el usuario o del sistema en una instancia del motor de base de datos de SQL Server.<br><strong>Sintaxis:<\/strong><\/p>\n\n\n\n<p>sp_altermessage [ @message_id = ] message_number ,[ @parameter = ]&#8217;write_to_log&#8217;<br>,[ @parameter_value = ]&#8217;value&#8217;<\/p>\n\n\n\n<p><strong>Donde:<\/strong><br><strong>[ @message_id = ] message_number<\/strong> Especifica el Id del mensaje<br><strong>[ @parameter = ]&#8217;write_to_log<\/strong>&#8216; Especifica si se va a escribir en el log de Windows<br><strong>[ @parameter_value = ]&#8217;value&#8217;<\/strong> Se utiliza con @parameter para indicar que el error debe escribirse en el registro de aplicaci\u00f3n de Microsoft Windows<\/p>\n\n\n\n<p><strong>Ejemplo<\/strong><br><strong>El siguiente ejemplo permite especificar que el mensaje de error creado se escriba en el log de Windows.<\/strong><\/p>\n\n\n\n<p>sp_altermessage 50001 , &#8216;with_log&#8217; ,&#8217;true&#8217;<br>go<\/p>\n\n\n\n<p><strong>Procedimiento almacenado sp_dropmessage <\/strong><\/p>\n\n\n\n<p>Elimina un mensaje de error definido por el usuario<br>Sintaxis:<\/p>\n\n\n\n<p>sp_dropmessage [ @msgnum = ] message_number [ , [ @lang = ] &#8216;language&#8217; ]<\/p>\n\n\n\n<p><strong>Donde:<\/strong><br><strong>[ @msgnum = ] message_number<\/strong> Especifica el Id del mensaje<br><strong>[ @lang = ] &#8216;language&#8217;<\/strong> Especifica el lenguaje.<\/p>\n\n\n\n<p><strong>Ejemplo<\/strong><br><strong>El siguiente c\u00f3digo elimina el mensaje creado con Id 50001<\/strong><\/p>\n\n\n\n<p>sp_dropmessage 50001, &#8216;Spanish&#8217;<br>go<\/p>\n\n\n\n<script async src=\"\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js\"><\/script>\n<ins class=\"adsbygoogle\"\n     style=\"display:block; text-align:center;\"\n     data-ad-layout=\"in-article\"\n     data-ad-format=\"fluid\"\n     data-ad-client=\"ca-pub-2636008503986218\"\n     data-ad-slot=\"1902193434\"><\/ins>\n<script>\n     (adsbygoogle = window.adsbygoogle || []).push({});\n<\/script>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Controlando los errores<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Usando Try Catch<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li>Permite implementar el manejo de errores para Transact-SQL, esta estructura es similar a la de los lenguajes de programaci\u00f3n.<\/li><li>La sentencias Transact-SQL que pueden dar error se incluyen en el bloque TRY. Si se produce un error en el bloque TRY, &nbsp;el control se pasa a otro grupo de sentencias incluidas en un bloque CATCH.<\/li><\/ul>\n\n\n\n<p><strong>Sintaxis:<\/strong><\/p>\n\n\n\n<p>BEGIN TRY<br>Instrucciones Transact &#8211; SQL que pueden dar error<br>END TRY<br>BEGIN CATCH<br>Instrucciones Transact &#8211; SQL para manejar el error<br>END CATCH<\/p>\n\n\n\n<p><strong>Ejemplo:<\/strong><br><strong>Usando la base de datos Northwind, listar los registros de la tabla Ventas, tenga en cuenta que la tabla no existe. <\/strong><br><strong>El select se incluir\u00e1 en un procedimiento almacenado.<\/strong><\/p>\n\n\n\n<p>Use Northwind<br>go<\/p>\n\n\n\n<p><strong>El procedimiento almacenado<\/strong><\/p>\n\n\n\n<p>Create procedure spListaVentas<br>As<br>SELECT * FROM Ventas<br>go<\/p>\n\n\n\n<p><strong>Ahora ejecutamos el procedimiento almacenado.<\/strong><\/p>\n\n\n\n<p>BEGIN TRY<br>Execute spListaVentas<br>END TRY<br>BEGIN CATCH<br>SELECT ERROR_NUMBER() AS &#8216;N\u00ba Error&#8217;, ERROR_MESSAGE() AS &#8216;Mensaje&#8217;<br>END CATCH<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_Errores_02.png\" alt=\"\" class=\"wp-image-1323\" width=\"841\" height=\"146\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_Errores_02.png 606w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_Errores_02-300x52.png 300w\" sizes=\"auto, (max-width: 841px) 100vw, 841px\" \/><\/figure><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Manejando errores en SQL Server Al usar el lenguage Transact-SQL debemos tener en cuenta, como en cualquier lenguaje de programaci\u00f3n, que algunas instrucciones nos pueden dar errores debido a los valores de par\u00e1metros de entrada incorrectos o faltantes, ingresos de datos con tipos incorrectos, falta de datos en un procedimiento o funci\u00f3n definida por el &hellip; <\/p>\n<p><a class=\"more-link btn\" href=\"https:\/\/manualsqlserver.com\/?p=645\">Seguir leyendo<\/a><\/p>\n","protected":false},"author":1,"featured_media":1320,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6,8],"tags":[18,27,42,60],"class_list":["post-645","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-funcionessql","category-programacion","tag-create-procedure","tag-error","tag-message","tag-try-catch","nodate","item-wrap"],"_links":{"self":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/645","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=645"}],"version-history":[{"count":1,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/645\/revisions"}],"predecessor-version":[{"id":1326,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/645\/revisions\/1326"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/media\/1320"}],"wp:attachment":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=645"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=645"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=645"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}