2010-05-25 57 views
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 

回答

2

您以創建常規表的方式創建登臺表。使用定義列和數據類型的CREATE TABLE腳本。

OK

update prod 
set field1 = stage.field1 
from myproductiontable prod 
join mystagingtable stage on prod.somefield = stage.somefield 

添加記錄不督促

Insert myproductiontable (f1, f2, f3) 
select stage.f1, stage.f2, stage.f3 
from mystagingtable stage 
where not exists (select someid from myproductiontable prod WHERE stage.somefield = prod.somefield) 

但是你必須在臨時表中的一個或多個領域,涉及到在督促表中的記錄。有時你必須進行額外的連接才能獲得這種關係。

+0

對不起,我應該提到我知道登臺表是什麼,它與常規表(以創建方式)相同。我不明白如何對海量記錄進行內部連接更新以及如何處理併發更新。 – chobo2 2010-05-25 21:37:41

+0

嗨。我有幾個問題。首先是如果你的PK是一個遞增的int會發生什麼。你會如何將暫存表與主表相匹配?其次,你顯示的是如何處理併發插入?就像我正在做更新時所說的那樣,然後其他人在此時將批量插入到登臺表中。我如何確保當我大量刪除暫存表中已經在主表中更新過的表中的那些表? – chobo2 2010-05-26 18:04:20

+0

你必須有另一個領域或領域加入是唯一的。例如,您可以加入多個字段的組合,以創建唯一的ID。如果你沒有那個,那麼你遇到了麻煩,必須有一些東西需要匹配。 我不讓其他人插入我的登臺表,只是導入過程,所以沒有併發問題。 – HLGEM 2010-05-26 19:12:15

相關問題