数据库数据完整性保护策略解析
1. 触发器与存储过程中的错误处理
1.1 T - SQL 与 CLR 触发器的错误处理
在数据库操作中,错误处理至关重要。当 T - SQL 触发器回滚并引发错误时,进入错误处理块时事务已结束。而对于 CLR 触发器,连接是否结束由开发者掌控。当 CHECK 约束导致错误或执行简单的 RAISERROR 时,事务仍然存在。以下是通用的 CATCH 块代码:
BEGIN CATCH
IF @@trancount > 0
ROLLBACK TRANSACTION
--or this will not get rolled back
EXECUTE dbo.ErrorLog$insert
DECLARE @ERROR_MESSAGE nvarchar(4000)
SET @ERROR_MESSAGE = ERROR_MESSAGE()
RAISERROR (@ERROR_MESSAGE,16,1)
END CATCH
这段代码的逻辑是:若存在事务则回滚,记录错误日志,然后重新抛出错误信息。这种处理方式能简单直接地应对各种情况。
1.2 存储过程中的规则特性
在 SQL Server 数据库中,数据类型、约束和触发器相关规则应应用于所有数据库,以保护数据免受不良数据影响。而存储过程(T - SQL 或 CLR)中的规则相对宽松,编写其他代码时通常可不考虑。例如,对于声明为 INT NOT NULL
且有 CHECK 约