2012-01-31 4 views
0

SQL Server 2008 R2를 사용하고 있는데 몇 가지 관계가 있습니다. 여기에 내 예제 데이터베이스 디자인 (실제는 아니지만 문제를 보여줍니다)입니다.T-SQL 잘못된 관계를 수정하기위한 쿼리

Table - Products 
Columns: ProductID - primary key 
     ProductInfo - irrelevant to problem 
     ModelID - foreign key to Models table 
     MfgrID - foreign key to Mfgrs table 

Table - Models 
Columns: ModelID - primary key 
     ModelInfo - irrelevant to problem 

Table - Mfgrs 
Columns: MfgrID - primary Key 
     MfgrInfo - irrelevant to problem 

이 시나리오에서 제품은 모델 중 하나이며 Mfgr에 의해 만들어집니다. 내가해야 할 일은 Mfgr 테이블을 모델 테이블과 연관시키는 것입니다. 주어진 모델이 Mfgr에 의해 만들어지며 최종 제품에 대한 별도의 링크가 필요합니다.

실제 데이터가있는 실제 데이터베이스를 모델링하므로 실제 연습이 아닙니다. 내가하고 싶은 일은 모델에 열을 추가하고 MfgrID라고하고 Models에서 Mfgrs로 관계를 작성하는 것입니다. 그러면 Mfgr은 모델과 모델에 일대일 관계를 맺어 제품과 일대 다 관계를 맺을 것이고 세계는 더 좋은 곳이 될 것입니다!

글쎄, 내 세계는 어쨌든 더 좋은 곳이 될 것입니다.

이전 모델을 기반으로 새로운 관계를 만들어 각 모델이 해당 모델의 특정 제품에 대한 Mfgr을 가리키는 MfgrID 을 얻도록하고 싶습니다. 일단 그것이 성립되면 나는 Mfgrs 관계로 돌아가 제품을 삭제할 것이다.

질문 있으십니까? 당신은 모델 당 하나 개의 제품이있는 경우,이 그것을해야

데이브

+0

을 테스트하지 않고, 프로덕션 데이터베이스에 인터넷에서 다른 사람의 임의 스크립트를 실행해서는 안 있는지 확인하기! ;-) – Mithrandir

+0

나도, @ 미스 랜디 ... – JNK

답변

2

에게 ... 내 자신이 할 수있는 간결한 쿼리를 디자인하려고 혼란 점점 계속, 일체의 아이디어를 주셔서 감사합니다;

ALTER TABLE Models ADD MfgrID INT NULL FOREIGN KEY REFERENCES Mfgrs(MfgrID); 

UPDATE m SET MfgrID = p.MfgrID 
    FROM Models m JOIN Products p ON m.ModelID=p.ModelID; 

그리고 아마도 MfgrID가 필수이고 해당 열에 null이 없도록하려는 경우 가능합니다.

ALTER TABLE Models ALTER COLUMN MfgrID INT NOT NULL; 

그리고 그냥 내가 SQL 나쁜 관계를 해결할 수 있으면 좋겠다 처음 ;-)

+0

음, 그래, 좋은 지적이야. 나는 실제 데이터가있는 dev 데이터베이스를 가지고 있지만 경고를 주셔서 감사합니다! – DaveN59

+0

그런데 스크립트가 훌륭하게 작동했습니다. 그것은 저의 문구를 알아 내려고 애쓰는 것이 었습니다. 왜 그런지 모르겠습니다 ... – DaveN59