簡體   English   中英

如何在SQL Server 2005中創建登台表?

[英]How to make a staging table in SQL Server 2005?

我聽說過要做登台表,但我想知道您實際上是如何做到的。

我想將SqlBulkCopy做到登台表中。 然后更新真實表。

我在SQL Server 2008中聽說可以使用稱為merge的東西,但是我正在使用SQL Server 2005,所以我聽說必須使用更新內部聯接?

我不確定那會是什么樣子(我猜最好的方法是用SP編寫它)。 此外,登台表必須能夠處理並發更新。

我當時正在考慮將另一列作為GUID放入暫存器中,這樣我就可以知道哪些記錄屬於哪個組,以及何時該從暫存表中刪除記錄,我可以使用它。

因此,有人可以向我展示任何有關此操作的示例或教程嗎? 還有這種方法有多快? 假設您要更新的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

創建臨時表的方式與創建常規表的方式相同。 使用CREATE TABLE腳本定義列和數據類型。

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)

但是您必須在登台表中具有一個或多個與prod表中的記錄相關的字段。 有時,您必須進行額外的聯接才能建立這種關系。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM