我一直在与我的经理讨论过在Sql Server中插入表的行为。他简要地向我解释了他对我所得到的理解,这听起来特定于线程。他是一个忙碌的人,并不总是有时间深入细节。我想更多地了解插入表的工作原理。
当有多个插入表时,它们是唯一的,它们是否有别名?
然后在每个帖子结束时丢弃它们吗?
它们甚至是特定于线程的吗?
我很欣赏这可能不是一个理想的网站问题,但是你们之间有很多关于这方面的知识。
干杯
答案 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”表将会有所不同。