문제

나는이 템플릿 테이블의 키가 무엇인지 오도하고 있었다. 따라서 잘못된 필드를 외국 키로 추가했다. 이제 외국 키를 추가해야하며 이미 채워진이 다른 필드를 기반으로 값을 채우고 싶습니다. 업데이트 문 으로이 작업을 수행하기 시작했지만 어떻게 해야할지 잘 모르겠습니다.

내 스키마의 일부 :

제품 테이블 :

ProductName (key)
TemplateName
TemplateID
...

TemplateId를 추가했지만 아직 데이터가없고 무효가됩니다.

템플릿 테이블 :

TemplateID (key)
TemplateName
...

템플릿 테이블을 사용하여 제품 테이블의 각 템플릿 게임에 대한 일치하는 TemplateID를 찾아 제품 테이블의 외부 키 참조에서 채우고 싶습니다.

업데이트의 하위 쿼리 로이 작업을 수행 할 수 있습니까? 아니면 저장된 Proc를 작성해야합니까? SQL Server 2008을 사용하고 있습니다

도움이 되었습니까?

해결책

간단한 업데이트 쿼리로 수행 할 수 있습니다

UPDATE Products
SET Products.TemplateID = Templates.TemplateID
FROM Templates
WHERE Templates.TemplateName = Products.TemplateName

FROM 절에 제품 테이블을 지정하거나 조인 절을 지정할 필요가 없습니다. FROM 절에서 템플릿 테이블을 지정합니다. WHERE 절에서 업데이트 절에서 사용하는 Tablename을 사용하여 두 테이블의 레코드를 연관시킬 수 있습니다.

다른 팁

조인 솔루션은 다음과 같습니다. 일치하는 행만 업데이트된다는 점에서 중요합니다.

Update p
Set p.TemplateId = t.TemplateId
From Products p
  join Templates t
  On p.TemplateName = t.TemplateName

하위 쿼리 솔루션은 다음과 같습니다. 일치하지 않는 경우에도 모든 제품 행이 업데이트됩니다.

Update p
Set p.TemplateId =
(
  Select t.TemplateId
  From Templates t
  Where p.TemplateName = t.TemplateName
)
From Products p
update Templates
set TemplateId=Products.TemplateId
from Templates
inner join Products
   on Templates.TemplateName=Products.TemplateName
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top