SQL Server Management Studio에서 데이터베이스로 작업하고 있는데 두 개의 테이블 인 Route and Tractor가 있습니다 (단순화 된 예입니다). 현재 Route 테이블에는 TractorID라는 열이 있습니다. 트랙터 테이블의 ID 열의 외래 키 또는 인덱스는 아니지만 애플리케이션에서 ID로 트랙터 테이블을 검색하는 데 사용됩니다. 이를 통해 사용자는 트랙터가 사용 된 경로에 영향을주지 않고 과거에 트랙터를 삭제할 수있었습니다.이미 데이터가있을 때 열을 외래 키로 업그레이드
TractorID 열이 트랙터 테이블의 ID 열에 대한 외래 키이므로 문제가 발생했습니다. 이제 데이터베이스를 업그레이드합니다. 사용자가 트랙터를 삭제했지만 경로 테이블에서 업데이트되지 않았으므로 트랙터 테이블에 더 이상 존재하지 않는 TractorID가있는 몇 가지 경로가 있습니다. 컬럼을 외래 키로 업그레이드 할 수 있도록 이러한 잘못된 ID를 미리 null로 설정해야합니다.
는 그래서 아래 문을 사용하여 수행했습니다
UPDATE Route SET Route.TractorID = NULL
WHERE Route.TractorID IS NOT NULL AND NOT EXISTS(SELECT * FROM Tractor
WHERE Tractor.ID = Route.TractorID)
지금까지,이 사항이 트릭을 할 것 같다,하지만 난 그것이 얼마나 효율적으로 걱정입니다. Google은 한 달에 250 만 개 정도의 경로를 포함하는 몇 가지 데이터베이스를 업그레이드해야합니다. 나는이 서브 쿼리가 각 행에 대해 트리거한다고 생각한다. 따라서 경로와 트랙터 테이블을 함께 결합 (
JOIN Tractor ON Route.TractorID = Tractor.ID
)하고 그 행의 조인이 실패한 경우
TractorID
을
NULL
으로 설정하는 해결책을 찾고자한다.
TractorID
은 (는)
Tractor.ID
과 일치하지 않습니다.
이것이 가능할까요? 아니면 현재의 솔루션으로 충분합니까? 미리 감사드립니다.
굉장! 이것이 제가 찾고 있던 것입니다. 가능한 모든 조인에서 자신을 새로 고쳐야합니다 ... – Otteravenger