2017-04-14 1 views
0

아래의 쿼리를 사용하여 테이블 o의 필드 sku를 테이블 p의 필드 AutoSKU로 업데이트합니다. 그리고 그것을 실행하면 오류가 발생합니다 : "모호한 열 이름 'sku'". 엔진이 어디서 어떤 sku에 대해 이야기하는지 모르기 때문에 문제가 있다는 것도 압니다. 하지만 각 업데이트 행이 올바르게 매핑되었는지 확인하려면 해당 조건이 필요합니다. sku를 o.sku로 바꾸면 "여러 부분 식별자"o..sku "를 바인딩 할 수 없습니다."라는 또 다른 오류가 나타납니다. 어떤 아이디어?Sql 업데이트 - 모호한 열 이름

UPDATE o 
SET  sku = p.AutoSKU 
FROM o (NOLOCK) 
     JOIN a (NOLOCK) ON a.Sku = o.sku 
     JOIN p (NOLOCK) ON p.Code = a.ProductCode 
WHERE o.sku <> p.AutoSKU 
     AND sku = a.Sku 
+1

여기'AND sku = a.Sku'는 첫 번째'sku'에 적절한 테이블 별명을 붙여야합니다. –

+1

질문이 의미가 없습니다. 당신은 이미'on' 절에서'Sku'에 대한 조건을 가지고 있습니다. 'WHERE' 절에서 반복 할 필요는 없습니다. –

+0

당신이 맞습니다, @GordonLinoff. 나는 엔진이 FROM 절의 o 테이블과 다르게 Update 쿼리에서 o 테이블을 처리 할까봐 걱정했습니다. 고맙습니다! –

답변

1

이 때문에 마지막 줄에 가장 가능성이 - 당신은 첫 번째 sku 열 별칭을 할 필요가 다음과 같은 AND sku = a.Sku :

UPDATE o 
SET  sku = p.AutoSKU 
FROM o (NOLOCK) 
     JOIN a (NOLOCK) ON a.Sku = o.sku 
     JOIN p (NOLOCK) ON p.Code = a.ProductCode 
WHERE o.sku <> p.AutoSKU 
     AND o.sku = a.Sku -- a bit redundant 

@GordonLinoff가 언급 한 바와 같이, 그 조건을 필요로하지 않지만

ON 절에 이미 있으므로 WHERE 절에 있습니다.

+0

내가 언급 한 것처럼 이것은 하나의 오류를 가져올 것이다. 벌써 해봤 어. 그러나 고든은 올바르게, 나는 그 상태로 다시 시험해 보았다. 그리고 그것은 정확한 결과를 가져온다. 고맙습니다! –

0

이 괜찮을 것 :

UPDATE o 
    SET sku = p.AutoSKU 
    FROM o JOIN 
     a 
     ON a.Sku = o.sku JOIN 
     p 
     ON p.Code = a.ProductCode 
    WHERE o.sku <> p.AutoSKU; 

ON 절은 이미 sku의에 조건을 가지고있다. WHERE 절에서이를 반복 할 필요는 없습니다.

또한 매우 의도적으로 사용하고 있고 그것이 무엇인지 알지 않는 한 WITH (NOLOCK)을 사용하지 마십시오.

마지막으로, 오류 메시지는 해당 버전의 쿼리에 오타가 있음을 나타냅니다. o..skuo.sku과 다릅니다.