2011-12-01 2 views
2

테이블 스키마를 동기화 된 상태로 유지하기 위해 스크립트 작업을하고 있습니다.스키마 변경 테이블 다시 작성

MS SQL의 테이블 스키마를 삭제하고 다시 만들고 데이터를 다시 삽입해야하는 작업의 전체 목록이 있습니까?

+0

"다시 작성하셨습니까?" 떨어 뜨리고 다시 만들었습니까? –

+0

예, 삭제, 다시 작성 및 데이터가 다시 삽입되었습니다. – Darthg8r

답변

3

CCDL (CREATE-COPY-DROP-RENAME) 전략을 표준화하는 것이 더 좋을 수 있으며 전체 시나리오를 컴파일하는 대신 DDL이 재 작성을 필요로하지 않는 몇 가지 시나리오에서만 내부 변경을 시도하는 것이 좋습니다 명부. 여기에 설명 된 전략은 link입니다.

AFAIK, 당신은 단지 열이있는 경우 (재건없이) 기존 테이블에 열을 추가하도록 허용 :

  1. 테이블
  2. 의 끝에 추가됩니다 널 (NULL) 또는이있다 기본 제약
  3. 다른 모든 경우에

, MSSQL은 잠재적으로이 새로 추가 된 열 또는 데이터 행의 값으로 사용 해야할지하지 않는 경우 실패합니다 손실은 결과입니다 (예를 들어 절단). 중간에 추가 된 기본 열도 강제로 다시 작성됩니다.

더 복잡한 작업을 수행하려면 배포의 성공 여부가 테이블에있는 데이터 형식 인 에 따라 달라지며 단순히 관련된 스키마가 아닙니다. 예를 들어, 열 길이를 큰 값 (varchar(50) --> varchar(100))으로 변경하면 성공할 수 있습니다. 그러나 길이를 줄이면 가끔이 허용됩니다. 데이터 유형 변경을 마이그레이션하는 것은 또 다른 까다로운 작업입니다.

간단히 말해서, 나는 항상을 재건하고 거의 자리를 바꾸지 않을 것입니다. 내가 꽤 이런 종류의 물건을 관리하기 위해 Visual Studio를 데이터베이스 프로젝트를 사용하여 완전히 익숙해

create table dbo.Yak(s varchar(100)); 
insert into dbo.Yak 
    values(replicate('a', 100)); 
go 

-- attempt to alter datatype to 50 (FAIL: String or binary data would be truncated.) 
alter table dbo.Yak 
    alter column s varchar(50); 
go 

-- shorten the data in row to avoid data loss 
delete from dbo.Yak; 
insert into dbo.Yak 
    values(replicate('a', 50)); 
go 

-- again, attempt to alter datatype to 50 (SUCCESS) 
alter table dbo.Yak 
    alter column s varchar(50); 
go 

select len(s),* from dbo.Yak; 
go 

--cleanup 
drop table dbo.Yak; 
go 
+0

그것은 훌륭한 읽을 거리였습니다. 잘 했어. – Darthg8r

1

Management Studio에서 변경할 테이블을 선택하고 디자인을 마우스 오른쪽 단추로 클릭합니다. 테이블 디자인 창에서 열의 데이터 유형을 변경하십시오 (int로 테스트 됨).

저장하는 대신 창을 마우스 오른쪽 버튼으로 클릭하고 "변경 스크립트 생성"을 선택하십시오. 대화 상자에서 SQL 문을 복사하십시오.

*) 이전 버전 (SQL2000)에서는 모든 변경 사항이 전체 테이블을 다시 만들었습니다 (기억하는 한). 이름 바꾸기 및 열 추가가 ALTER TABLE 문에 맞게 최적화 된 것 같습니다.

+0

예, 이것은 알아내는 방법입니다. 그러나 문제는 그것을하는 방법이었습니다 – zanlok

1

: -

은 행 내부 데이터에 영향을 미치는 결과를 설명합니다. 내 스키마를 프로젝트로 가져 오면 원하는대로 변경할 수 있으며 VSDP는 오브젝트를 삭제하지 않고 (예 : ALTER를 사용하여) 변경을 수행 할 수 있는지 또는 스키마를 생성해야하는지 여부를 파악합니다. 새로운 객체와 값을 이전 객체에서 복사합니다 (자동으로 수행합니다).

특정 환경 및 워크 플로우에 어떻게 적용 할지를 이해하기 위해 약간의 작업을 계획하십시오. 그러나 나는 그 노력이 매우 가치 있다고 생각했습니다.

관련 문제