关于表变量

1、表变量和临时表一样,当表足够小且SQLServer有足够的内存时,表变量的页驻留在缓存中。

2、表变量的范围是明确定义的,它的范围被定义在当前级别的当前批处理范围内,与其他变量一样。

3、表变量不是外部事物的组成部分。相反,它的事务被限制到语句级别以支持语句回滚。如果修改表变量的语句失败,则该语句的更改会被撤销。但是如果语句是外部事务的一部分,外部事务回滚后,对表变量已经完成的更改将不可撤销。

 

    假如要编写一个审核触发器,以审核对一些表的更改。如果满足一些逻辑条件,你希望能回滚这些更改,但你还是希望能审核这些更改尝试。如果你从inserted或deleted复制数据到审核表中,触发器中的回滚也会撤销这些操作。如果你先回滚这些更改然后尝试审核它们,这是deleted和inserted已经为空。

    要解决这个问题,先从inserted或deleted把数据复制到表变量中,再执行回滚操作,然后在触发器的新事务中把数据从表变量复制到审核表中。没有别的更简单的解决方案了。

posted @ 2011-08-23 10:51  梅子黄时雨  阅读(290)  评论(0编辑  收藏  举报