0
我聽說過要做臨時表,我想知道你是如何做到的。如何在SQL Server 2005中創建登臺表?
我想做一個SqlBulkCopy到一個臨時表。然後更新真實的表格。
我聽到SQL Server 2008中可以使用一些稱爲合併但我使用SQL Server 2005,所以我聽說我必須使用更新內部連接?
我不知道這是怎麼回事(我猜最好的方法是寫在SP中)。此外,臨時表需要能夠處理併發更新。
我正在考慮將另一列放在作爲GUID的stage中,這樣我就知道哪些記錄屬於哪個組,以及何時該從staged表中刪除記錄,我可以使用它。
因此,任何人都可以向我展示任何示例或教程如何做到這一點?這種方式也有多快?說,如果你的更新50,000條記錄多長時間將是承擔(瞎猜是罰款)
編輯
所以這是我現在的SP。我認爲它應該能夠做併發連接,但我想確保。
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[sp_MassUpdate]
@BatchNumber uniqueidentifier
AS
BEGIN
update Product
set ProductQty = 50
from Product prod
join StagingTbl stage on prod.ProductId = stage.ProductId
where stage.BatchNumber = @BatchNumber
DELETE FROM StagingTbl
WHERE BatchNumber = @BatchNumber
END
對不起,我應該提到我知道登臺表是什麼,它與常規表(以創建方式)相同。我不明白如何對海量記錄進行內部連接更新以及如何處理併發更新。 – chobo2 2010-05-25 21:37:41
嗨。我有幾個問題。首先是如果你的PK是一個遞增的int會發生什麼。你會如何將暫存表與主表相匹配?其次,你顯示的是如何處理併發插入?就像我正在做更新時所說的那樣,然後其他人在此時將批量插入到登臺表中。我如何確保當我大量刪除暫存表中已經在主表中更新過的表中的那些表? – chobo2 2010-05-26 18:04:20
你必須有另一個領域或領域加入是唯一的。例如,您可以加入多個字段的組合,以創建唯一的ID。如果你沒有那個,那麼你遇到了麻煩,必須有一些東西需要匹配。 我不讓其他人插入我的登臺表,只是導入過程,所以沒有併發問題。 – HLGEM 2010-05-26 19:12:15