小编典典

T-SQL和事务流-从头到尾

sql

假设我有带有列的表 TabA

  • col1-主键(但不包括身份)

  • col2-外键

  • col3-具有唯一约束

  • col4-具有检查约束

  • col5-具有NOT NULL约束

此外, TabA 具有2个触发器:

  • INSTEAD OF INSERT-这个取消插入到 TabA中 (当然),但是在它自己的代码中,将新行插入 TabA中 。保证此新行中所有列的值正确

  • 插入后-此仅打印字符串

现在,我准备将新行插入 TabA (INSERT INTO TabA VALUES(…))。显然,我们必须期待一些事件:

  1. 必须检查col1的值的唯一性和NOT NULL(主键)

  2. 必须检查col2的值是否与父母表格(外键)相符

  3. 必须检查col3的值是否唯一

  4. 必须对照检查约束检查col4的值

  5. 必须为col5的值检查NOT NULL

  6. 必须执行INSTEAD OF触发器

  7. 必须执行AFTER触发器

我想要的是重新排序此列表(1-7),以使数字1出现在首先发生的事件上,2 =发生在第二发生的事件上,…,以及发生在最后一个事件上的7。

另外,如果事件X产生错误(例如,col5 = NULL)-这是否意味着事件X + 1,X + 2 .. 不会 发生?

谢谢您的帮助!


阅读 141

收藏
2021-03-23

共1个答案

小编典典

通过按照触发器中的print语句所述设置测试表并仅尝试插入无效值,就可以轻松地进行测试。这样做给了我

  1. 代替触发
  2. 检查PK的NULL
  3. 检查第5列的NULL
  4. 检查PK约束的唯一性
  5. 检查唯一约束的唯一性
  6. 检查第4列的检查约束
  7. 检查FK约束
  8. 触发后触发

据我所知,保证1,7和8的顺序。其余都是任意的。任何错误将停止后续步骤。

2021-03-23