2010-05-25 4 views
0

스테이징 테이블에 대해 들었는데 실제로 어떻게 처리하는지 궁금합니다.SQL Server 2005에서 준비 테이블을 만드는 방법은 무엇입니까?

스테이징 테이블로 SqlBulkCopy를 만들고 싶습니다. 그런 다음 실제 테이블을 업데이트하십시오.

SQL Server 2008에서 merge라는 항목을 사용할 수 있다고 들었지만 SQL Server 2005를 사용하고 있으므로 업데이트를 사용해야한다고 들었습니다.

내가 어떻게 보이는지 (나는 SP에서 쓰는 것이 가장 좋은 방법이라고 생각한다) 나는 확실하지 않다. 또한 스테이징 테이블은 동시 업데이트를 처리 할 수 ​​있어야합니다.

나는 어떤 레코드가 어떤 그룹에 속해 있는지 알기 위해 GUID로 준비된 다른 컬럼을 넣을 생각이었습니다. 그리고 준비된 테이블에서 레코드를 삭제할 시간이되면 그냥 사용할 수 있습니다.

아무도 나에게 그것을 보여주는 방법에 대한 예제 또는 튜토리얼을 보여줄 수 있습니까? 또한이 방법은 얼마나 빠릅니까? 당신이 5 만 개 기록을 갱신하는 경우에 그 그래서 내 SP 지금의 (a 어디 까지나 추정치 일뿐 정확한 통계는 괜찮)

편집

얼마나 걸릴지 말. 동시 연결을 할 수 있어야한다고 생각하지만 확신하고 싶었습니다.

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

+0

안녕하세요. 몇 가지 질문이있어. 첫 번째는 PK가 증가하는 int 인 경우 발생합니다. 스테이징 테이블을 메인 테이블과 어떻게 일치시킬 것입니까? 둘째, 동시 삽입과 관련하여 표시 한 것은 무엇입니까? 마찬가지로 내가 업데이 트를하고 그때 다른 사람이 일괄 처리를 스테이징 테이블에 그 일을하는 경우 말한다. 스테이징 테이블에서 이미 메인 테이블에서 업데이트 된 위치를 대량으로 삭제할 때 어떻게해야합니까? – chobo2

+0

고유 한 필드 또는 필드를 추가해야합니다. 예를 들어, 고유 ID를 만드는 여러 필드의 조합에 참여할 수 있습니다. 당신이 그걸 가지고 있지 않다면, 당신은 곤경에 처해 있습니다. 일치해야 할 것이 있습니다. 다른 사람이 내 스테이징 테이블에 삽입하는 것을 허용하지 않으므로 가져 오기 프로세스만으로는 동시 문제가 발생하지 않습니다. – HLGEM

관련 문제