Tenemos una gran aplicación escrita principalmente en SQL Server 7.0, donde todas las llamadas a bases de datos se realizan en procedimientos almacenados. Ahora estamos ejecutando SQL Server 2005, que ofrece más características de T-SQL.¿Cuál es el mejor uso de la práctica del manejo de errores de SQL Server T-SQL?
Después de seleccionar SELECT, INSERT, UPDATE y DELETE, @@ ROWCOUNT y @@ ERROR se capturan en variables locales y se evalúan para detectar problemas. Si hay un problema se hace lo siguiente: parámetro de salida de mensajes
- de error se establece
- rollback (si es necesario) se hace
- información que está escrito (INSERT) para registrar la tabla
- de retorno con una número de error, exclusivo de este procedimiento (positivo si es fatal, negativo es advertencia)
No todos comprueban las filas (solo cuando se conoce) y algunas difieren con más o menos información de registro/depuración. Además, la lógica de filas a veces se divide de la lógica de error (en actualizaciones donde se comprueba un campo de concurrencia en la cláusula WHERE, rows = 0 significa que otra persona ha actualizado los datos). Sin embargo, aquí es un ejemplo bastante genérica:
SELECT, INSERT, UPDATE, or DELETE
SELECT @[email protected]@ERROR, @[email protected]@ROWCOUNT
IF @Rows!=1 OR @Error!=0
BEGIN
SET @ErrorMsg='ERROR 20, ' + ISNULL(OBJECT_NAME(@@PROCID), 'unknown')
+ ' - unable to ???????? the ????.'
IF @@TRANCOUNT >0
BEGIN
ROLLBACK
END
SET @LogInfo=ISNULL(@LogInfo,'')+'; '+ISNULL(@ErrorMsg,'')+
+ ' @YYYYY=' +dbo.FormatString(@YYYYY)
+', @XXXXX=' +dbo.FormatString(@XXXXX)
+', Error=' +dbo.FormatString(@Error)
+', Rows=' +dbo.FormatString(@Rows)
INSERT INTO MyLogTable (...,Message) VALUES (....,@LogInfo)
RETURN 20
END
Estoy buscando en la sustitución de la forma en que hacemos esto con el try-catch T-SQL. He leído sobre la sintaxis TRY...CATCH (Transact-SQL), así que no solo publique un resumen de eso. Estoy buscando buenas ideas y cómo mejor para hacer o mejorar nuestros métodos de manejo de errores. No tiene que ser Try-Catch, simplemente cualquier uso bueno o mejor práctica del manejo de errores T-SQL.
Creo que se salta las cosas de SQL Server 2005, pero de todos modos es excelente. Y el resto de su sitio también. – gbn
Para SQL Server 2005+ comience aquí http://www.sommarskog.se/error_handling/Part1.html –