현재 테이블은 다음과 같습니다.스키마 변경 : 다른 테이블의 필드를 외부 키로 변환
Stuff ---------- StuffId identity int not null Description nvarchar(4000) null ...
특별히 사용자 생성 컨텐츠 용으로 따로 설정 한 별도의 테이블에 설명을 저장하려고합니다.
Content ---------- ContentId identity int not null Content nvarchar(max) not null ...
(이 테이블은 이미 있습니다. 그리고 다른 테이블은 이미 그 안에 엔트리를 참조하고 있습니다.)
그래서 다음과 같이해야합니다 :
- 외래 키 제약 조건을 가진 Stuff 테이블에 DescriptionContentId 필드를 만듭니다.
- 현재 설명 컨텐츠를 컨텐츠 테이블에 복사하십시오.
- 2 단계에서 값을 삽입 할 때 자동으로 생성 된 ContentId 값을 갖도록 각 DescriptionContentId를 설정하십시오.
- 설명 열을 삭제하십시오.
1 단계와 4 단계를 수행하는 방법을 알고 있지만 2 단계와 3 단계는 거의 동시에 수행해야하기 때문에 나를 잊어 버리고 있습니다. 이것은 상당히 일반적인 스키마 변경 인 것처럼 보입니다. 가장 좋은 방법은 무엇입니까?
업데이트
나는 Output 키워드 덕분에 좀 더 가까워졌습니다. 그러나 나는 아직 뭔가를 놓치고 있습니다. 여기 내가 뭘하고 싶은거야 :
create table #tmp (StuffId int, ContentId int)
insert into Content(Content)
output s.StuffId, inserted.ContentId
into #tmp(StuffId, ContentId)
select Description
from Stuff s
where Description IS NOT NULL
create table #tmp (StuffId int, ContentId int)
insert into Content(Content)
output s.StuffId, inserted.ContentId
into #tmp(StuffId, ContentId)
select Description
from Stuff s
where Description IS NOT NULL
그러나 그것은 콘텐츠 테이블에 삽입 된 필드 중 하나가 아니기 때문에 s.StuffId를 참조 할 수 없습니다. 각 Stuff 항목에 대해 새 Content 항목을 삽입 할 때 Stuff의 ID와 Content의 ID를 어떻게 연관시킬 수 있습니까?
우수를 사용하는 방법에 대한 온라인 설명서에서 예. 이것이 내가 잃어버린 열쇠 인 것 같습니다. 나는 그것에 대해 연구하고 그것이 효과가 있는지 알려줄 것입니다. – StriplingWarrior
불행히도, 나는 여전히 차단되어 있습니다. 내 업데이트를 참조하십시오. – StriplingWarrior
변환을 수행하려면 콘텐츠 테이블에 일시적으로 stuffid를 추가해야합니다. 위의 3 항을 참조하십시오. – HLGEM