2010-07-01 2 views
2

나는 이라는 열이있는 여러 테이블을 가지고 있습니다. 주문 ID는입니다. 난 그냥 리팩토링을 완료하고 난 주문 테이블을 제거하고 싶습니다 거래라는 새로운 테이블이 있습니다. 나는 ORDERID 열이있는 모든 테이블은 이제 는 TransactionId데이터베이스 리팩토링 중에 ids를 매핑하는 가장 쉬운 방법

이 완료을 갖고 싶어. 이제 transactionId 열을 채워야합니다. 나는 transactionId는 ORDERID 사이 그래서 내가 (?? 난, SQL 쿼리를 통해 코드를 통해 등이 작업을 수행해야합니다) 그 새로운 transactionId는 열을 채울 갈 수있는 가장 빠른 방법

을보고 싶어 오늘 매핑이

그래서 Join 테이블에 transationId 열이 있으므로 조인을 할 수 있습니다.

나는이 (의사 SQL) 같은

update childTable CT 
set transactionId = MapFromOrderId(CT.OrderId) 

어떤 제안을 말한다 쿼리를 원하는?

답변

3

나는 SQL 코드에서 그것을 할 것입니다 :

SELECT 
    * 
FROM 
    My_Table 
WHERE 
    transaction_id IS NULL 
1

과정은 일반적으로 다음과 같습니다 :

  • 것이 확인

    다음
    UPDATE MT 
    SET 
        transaction_id = MAP.transaction_id 
    FROM 
        My_Table MT 
    INNER JOIN My_Map MAP ON 
        MAP.order_id = MT.order_id 
    

    모든 행이 매핑 된 있는지 확인하십시오 데이터베이스가 백업됩니다.

  • 각 하위 테이블에 Addtransctionid가 백업됩니다. 상기 매핑 테이블 조인에 따라 채우기는
  • 을 더 빈 값이 없는지 확인 (당신은 테이블에서 OrderID를하고 는 TransactionId 사이의 매핑을 저장?했다).
  • 트랜잭션에 대한 FK를 작성하고 주문 테이블에 fk를 놓은 다음 주문 번호 컬럼을 삭제하십시오. 그러면 반복하십시오. 확실히 모든 것을 만들 수
  • 테스트는 DEV 및 QA 테스트 후 자극하는 포트를 쉽게 찾아 볼 수 있도록 확실히 내가 스크립트에서이 작업을 수행 할 것 제대로

을했다.

prod에서 데이터베이스가 단일 사용자 모드 일 때이 작업을 수행해야 프로세스 전환시 새로운 주문이 추가되지 않습니다.

+0

예, 주문 테이블의 orderId에서 transactionId 로의 매핑을 수행합니다. 나는 내가 찾고있는 것의 핵심에 도달하기 위해 질문에 좀 더 많은 정보를 추가했다. . . – leora

관련 문제