하나의 가능한 솔루션은 테이블을 업데이트하는 데 필요한 시간을 최소화하는 것입니다.
먼저웨어 하우스에서 데이터를 다운로드 할 준비 테이블을 만듭니다. 당신이해야 할 "삽입, 업데이트 및 삭제"하는 경우
최종 테이블
에서 피날레 표는 다음과 같습니다 가정 수 있습니다 :
Table Products:
ProductId int
QuantityOnHand Int
을 그리고 당신은 창고에서 QuantityOnHand를 업데이트해야합니다. 이 같은 "작업"테이블 만들기 다음
Table Prodcuts_WareHouse
ProductId int
QuantityOnHand Int
그리고 :
:
는
Table Prodcuts_Actions
ProductId int
QuantityOnHand Int
Action Char(1)
업데이트 프로세스 사항은 다음과 같이해야한다
먼저 같은 준비 테이블을 만듭니다 1. 테이블 자르기 Prodcuts_WareHouse
2.Truncate table Prodcuts_Actions 0 3.Fill 창고
(4)로부터의 데이터와 Prodcuts_WareHouse 테이블.이와 함께 Prodcuts_Actions 테이블 채우기 :
인서트 :
INSERT INTO Prodcuts_Actions (ProductId, QuantityOnHand,Action)
SELECT SRC.ProductId, SRC.QuantityOnHand, 'I' AS ACTION
FROM Prodcuts_WareHouse AS SRC LEFT OUTER JOIN
Products AS DEST ON SRC.ProductId = DEST.ProductId
WHERE (DEST.ProductId IS NULL)
이제 잠겨 있지 않은 최종 테이블까지
INSERT INTO Prodcuts_Actions (ProductId, QuantityOnHand,Action)
SELECT DEST.ProductId, DEST.QuantityOnHand, 'D' AS Action
FROM Prodcuts_WareHouse AS SRC RIGHT OUTER JOIN
Products AS DEST ON SRC.ProductId = DEST.ProductId
WHERE (SRC.ProductId IS NULL)
업데이트
INSERT INTO Prodcuts_Actions (ProductId, QuantityOnHand,Action)
SELECT SRC.ProductId, SRC.QuantityOnHand, 'U' AS Action
FROM Prodcuts_WareHouse AS SRC INNER JOIN
Products AS DEST ON SRC.ProductId = DEST.ProductId AND SRC.QuantityOnHand <> DEST.QuantityOnHand
을 삭제합니다.
5.In 거래는 최종 테이블 업데이트 :
위의 모든 과정을
BEGIN TRANS
DELETE Products FROM Products INNER JOIN
Prodcuts_Actions ON Products.ProductId = Prodcuts_Actions.ProductId
WHERE (Prodcuts_Actions.Action = 'D')
INSERT INTO Prodcuts (ProductId, QuantityOnHand)
SELECT ProductId, QuantityOnHand FROM Prodcuts_Actions WHERE Action ='I';
UPDATE Products SET QuantityOnHand = SRC.QuantityOnHand
FROM Products INNER JOIN
Prodcuts_Actions AS SRC ON Products.ProductId = SRC.ProductId
WHERE (SRC.Action = 'U')
COMMIT TRAN
, 당신은 필요 최소한으로 업데이트 할 레코드의 양을 최소화하고, 그래서 시간이 최종 테이블이됩니다 업데이트하는 동안 잠겨 있습니다.
마지막 단계에서 트랜잭션을 사용하지 않아도되므로 명령 실행시 테이블이 해제됩니다.
는 두 개의 별도의 부하 분산 서버는 완벽한 대안을 제공 할 수있다. 라이브 하나를 유지하고 다른 하나를 업데이트 한 다음 전환합니다. –