2011-07-27 25 views
3

我一直在與我的經理討論Sql Server中插入表的行爲。他簡單地向我解釋了他對我的結論的理解,它聽起來像是線程特定的。他是一個忙碌的人,並不總是有時間進入大量的細節。我想更多地瞭解插入的表格是如何工作的。SQL Server中插入表的機制是什麼?

當有多個插入的表格時,是什麼使它們唯一,是否有別名?

然後在每個線程結束時它們被丟棄嗎?

他們甚至可以說是線程的?

我很欣賞這可能不是一個理想的網站問題,但這裏有豐富的知識,對你有幫助。

乾杯

+1

你能詳細說明你對「插入表」的含義嗎?你是否指任何機會臨時表?您可能希望提供簡短的代碼示例,以免混淆。 –

+0

對不起,我的意思是這個!這只是一個關於臨時表(插入)性質的普遍問題。 – dotnetnewb

+0

事後看來這不是那麼重要,還有其他問題需要更重要的回答這個問題。只是想對事物的工作方式有一個很好的理解! – dotnetnewb

回答

5

他們不只是特定於線程,它們是針對特定的插入,更新或刪除操作。因此,如果在同一個存儲過程中,您通過兩個不同的步驟插入到同一個表中,則每個人都將擁有自己的插入和刪除實例,僅針對該操作。如果其他人同時執行操作,他們將擁有自己的表格版本。但是插入和刪除的表是批量導向的。如果您更新了10,000,000條記錄,即插入和刪除表中將有多少條記錄。如果你做一個插入1條記錄並循環1,000,0000次的遊標,你會在1,000,000個不同版本的插入和刪除中獲得一條記錄(這當然是你執行任務的最糟糕的方式)。重要的是要明白,它們包含一批記錄,因爲這意味着所有的觸發器都必須假定可能涉及多個記錄。

1

「插入」的虛擬表和「已刪除」是僅在一個時間和上下文一次。它可以用於觸發器或OUTPUT clausule。

「插入」和「刪除」表格具有相同的模式(在相同的地方),但可以有不同的記錄計數。 「已插入」表包含新記錄(插入的行,具有新值的更新行),「已刪除」表包含舊記錄(已刪除行,具有舊值的更新行)。

這些表的範圍適用於觸發器或OUTPUT clausule。因此,如果執行兩個/三個/ ...命令,「已插入」/「已刪除」表格將會不同。

Using the inserted and deleted Tables

+0

感謝TcKs,我確實瞭解它們如何被利用以及可以包含什麼類型的數據,如果它們是_were_線程特定的,當多個進程/觸發器/正在運行等等時,它更是如此,如果我們只是簡單的如果你明白我的意思,請在調用包含的數據時將它們稱爲插入的內容? – dotnetnewb

+0

是的,它們是線程特定的。 – TcKs