在执行后立即从 INSERT 触发器存储的 DB 值中检索
Retrieve from DB value stored by INSERT trigger immediately after it executes
在 SQLServer 数据库中,table 存在 (A),上面有一个 INSERT 触发器。在该触发器中,当一条记录插入到 (A) 中时,另一个 table (B) 中的值是 inserted/updated。
使用 ADO Recordset 的程序通过使用 AddNew/Update ADO Recordset 方法执行插入 (A)。在 table (A) 上调用 Recordset.Update 后立即尝试读取存储在 table (B) 中的值有多安全?考虑到整个过程包含在事务中,是否有 any 机会在服务器有机会执行 "INSERT INTO B" 之前执行 "SELECT FROM B" 语句来自触发器的语句(例如,在服务器高负载时)?
触发器同步执行,作为导致它们触发的语句的一部分。在触发器完成其操作之前执行后续语句是没有风险的,除非触发器正在执行某些操作以故意将其操作与原始语句分离 - 例如通过使用服务代理对某种形式的更改进行排队。
假设您的触发器未使用服务代理,而只是执行直接 INSERT
到 table B
,您是完全安全的。
在 SQLServer 数据库中,table 存在 (A),上面有一个 INSERT 触发器。在该触发器中,当一条记录插入到 (A) 中时,另一个 table (B) 中的值是 inserted/updated。
使用 ADO Recordset 的程序通过使用 AddNew/Update ADO Recordset 方法执行插入 (A)。在 table (A) 上调用 Recordset.Update 后立即尝试读取存储在 table (B) 中的值有多安全?考虑到整个过程包含在事务中,是否有 any 机会在服务器有机会执行 "INSERT INTO B" 之前执行 "SELECT FROM B" 语句来自触发器的语句(例如,在服务器高负载时)?
触发器同步执行,作为导致它们触发的语句的一部分。在触发器完成其操作之前执行后续语句是没有风险的,除非触发器正在执行某些操作以故意将其操作与原始语句分离 - 例如通过使用服务代理对某种形式的更改进行排队。
假设您的触发器未使用服务代理,而只是执行直接 INSERT
到 table B
,您是完全安全的。