SQL Server中插入表的机制是什么?

时间:2011-07-27 08:09:03

标签: sql sql-server-2008

我一直在与我的经理讨论过在Sql Server中插入表的行为。他简要地向我解释了他对我所得到的理解,这听起来特定于线程。他是一个忙碌的人,并不总是有时间深入细节。我想更多地了解插入表的工作原理。

当有多个插入表时,它们是唯一的,它们是否有别名?

然后在每个帖子结束时丢弃它们吗?

它们甚至是特定于线程的吗?

我很欣赏这可能不是一个理想的网站问题,但是你们之间有很多关于这方面的知识。

干杯

2 个答案:

答案 0 :(得分:5)

它们不仅仅是特定于线程的,它们特定于特定的插入,更新或删除操作。因此,如果在同一个存储过程中,您在两个不同的步骤中插入到同一个表中,则每个步骤都有自己的插入和删除实例,该实例仅特定于该操作。如果其他人同时执行操作,他们将拥有自己的表格版本。但是插入和删除的表是面向批处理的。如果更新了10,000,000条记录,那么将在插入和删除的表中记录多少条记录。如果您执行一个插入1条记录并循环1,000,000次的光标,您将在1,000,0000个不同版本的插入和删除中获得一条记录(这当然是您执行任务的最糟糕方式)。重要的是要理解它们包含一批记录,因为必须写入所有触发器,并假设可能涉及多个记录。

答案 1 :(得分:1)

“插入”和“删除”的虚拟表只在一次和上下文中使用一次。它可以用于触发器或OUTPUT clausule。

“inserted”和“deleted”表都有相同的模式(在同一个地方),但可以有不同的记录数。

“inserted”表包含新记录(插入的行,带有新值的更新行),“deleted”表包含旧记录(已删除的行,带有旧值的更新行)。

这些表的范围适用于触发器或OUTPUT clausule。因此,如果执行two / three / ...命令,“inserted”/“deleted”表将会有所不同。

Using the inserted and deleted Tables