다음을 통해 공유


이름 바꾸기 작업 중 데이터 보호

업데이트: 2007년 11월

데이터베이스 개체의 이름을 바꾼 다음 데이터베이스 프로젝트를 빌드하면 이 변경 내용을 반영하는 배포 스크립트가 생성됩니다. 열 또는 테이블 이름을 바꾸는 경우 스크립트에서 원래 이름을 가진 원래 열 또는 테이블을 삭제하고 새 이름을 가진 새 열 또는 테이블을 추가합니다. 이 변경 내용을 기존 데이터베이스에 업데이트로 배포하면 원래 열 또는 테이블의 데이터가 손실됩니다.

프로젝트 속성에서 적절한 옵션을 설정하여 원래 열이나 테이블을 삭제할지 여부를 제어할 수 있습니다. 프로젝트 속성의 빌드 탭에는 데이터베이스 프로젝트에 없지만 대상 데이터베이스에 있는 개체에 대해 DROP 문 생성 확인란이 있습니다. 이 확인란을 선택하면 프로젝트를 빌드할 때 생성되는 배포 스크립트에 이전 개체에 대한 drop 문이 포함됩니다. 이 확인란의 선택을 취소하면 프로젝트를 빌드할 때 생성되는 배포 스크립트에 이전 개체에 대한 drop 문이 포함되지 않습니다.

sp_rename 사용

수동으로 빌드 스크립트를 편집하여 열 및 테이블 삭제/추가를 sp_rename으로 변환할 수 있습니다.

예를 들어 테이블에 대해 다음을 지정할 수 있습니다.

sp_rename '<OLD TABLE NAME>', '<NEW TABLE NAME>', 'OBJECT'

예를 들어 열에 대해 다음을 지정할 수 있습니다.

sp_rename '<TABLE NAME>.<OLD COLUMN NAME>', '<NEW COLUMN NAME>', 'COLUMN'

자세한 내용은 방법: 데이터베이스 리팩터링 변경 내용 배포를 참조하십시오.

이전 개체 및 새 개체 간에 데이터 이동

drop 문에 의해 발생할 수 있는 데이터 손실을 방지하기 위해 drop 문을 배포하지 않도록 선택할 수 있습니다. 이 경우 대상 데이터베이스에 이전 개체 및 새 개체의 복사본이 모두 있습니다. 이전 개체에서 새 개체로 데이터를 이동한 다음 이전 개체를 삭제할 수 있습니다. 다음 방법 중 하나를 사용하여 이 작업을 수행할 수 있습니다.

  • select 문 또는 다른 T-SQL 문을 사용하여 수동으로 데이터를 이동합니다.

    예를 들어 테이블에 대해 다음을 지정할 수 있습니다.

    -- Deploy table add only.
    
    -- Move the data between the old and new tables.
    INSERT Region_New SELECT * FROM Region_Old
    
    -- Drop the old table manually.
    DROP TABLE Region_Old
    

    예를 들어 열에 대해 다음을 지정할 수 있습니다.

    -- Deploy column add only.
    
    -- Move the data between the old and new columns.
    UPDATE Region SET ColumnNew = ColumnOld
    
    -- Drop the old column manually.
    ALTER TABLE Region DROP COLUMN ColumnOld
    
  • bcp 유틸리티, 데이터 변환 서비스(SQL 2000) 또는 SQL Server Integration Services(SQL 2005)를 사용하여 자동으로 데이터를 이동합니다.

임시 저장소를 사용하여 데이터 이동

drop 문에 의해 발생할 수 있는 데이터 손실을 방지하기 위해 데이터를 임시 저장소로 이동할 수 있습니다. 변경 내용을 배포하기 전에 이전 테이블에서 임시 위치로 데이터를 이동합니다. 예를 들어 다른 데이터베이스의 테이블 또는 데이터 파일로 데이터를 이동할 수 있습니다. 그런 다음 drop 및 add 문을 배포합니다. 마지막으로 임시 위치에서 새 테이블로 데이터를 이동합니다. 다음 방법 중 하나를 사용하여 이 작업을 수행할 수 있습니다.

  • select into 또는 다른 T-SQL 문을 사용하여 수동으로 데이터를 이동합니다.

    예를 들어 테이블에 대해 다음을 지정할 수 있습니다.

    -- Move the data to temporary storage.
    SELECT * INTO TemporaryStorage.dbo.Region_Storage FROM Region_Old
    
    -- Deploy table drop/add.
    
    -- Move the data to the new table.
    INSERT Region_New SELECT * FROM TemporaryStorage.dbo.Region_Storage
    

    예를 들어 열에 대해 다음을 지정할 수 있습니다.

    -- Move the data to temporary storage.
    SELECT * INTO TemporaryStorage.dbo.Region_Storage FROM Region
    
    -- Deploy column drop/add.
    
    -- Move the data to the new column.
    UPDATE Region SET ColumnNew = rs.ColumnOld FROM Region r JOIN TemporaryStorage.dbo.Region_Storage rs ON r.RegionID = rs.RegionID
    
  • bcp 유틸리티, 데이터 변환 서비스(SQL 2000) 또는 SQL Server Integration Services(SQL 2005)를 사용하여 자동으로 데이터를 이동합니다.

참고 항목

작업

방법: 기존 데이터베이스에 배포하는 동안 데이터 손실 제어

기타 리소스

데이터베이스 개체 이름 바꾸기

이름 바꾸기 리팩터링 개요

리팩터링 변경 내용을 데이터베이스에 배포

데이터베이스 스키마 빌드 및 배포