연습: 두 데이터베이스의 스키마 비교

이 항목은 다음 언어에 적용됩니다.

Visual Studio Ultimate

Visual Studio Premium

Visual Studio Professional 

Visual Studio Express

항목이 적용됨 항목이 적용됨 항목이 적용되지 않음 항목이 적용되지 않음

이 연습에서는 Visual Studio를 사용하여 두 데이터베이스의 스키마를 비교합니다. 스키마 비교 작업을 수행하면 차이점을 통해 DDL(데이터 정의 언어) 스크립트도 생성됩니다. 이 파일을 사용하여 대상의 스키마를 소스의 스키마와 동기화할 수 있습니다. 자세한 내용은 데이터베이스 스키마 비교 및 동기화를 참조하십시오.

이 연습에서는 다음 절차를 따릅니다.

  • 간단한 데이터베이스를 만듭니다. 연습: 데이터베이스 및 데이터베이스 프로젝트의 스키마 비교를 완료한 경우 결과로 생성된 데이터베이스를 사용하고 이 연습의 일부를 건너뛸 수 있습니다.

  • 빈 데이터베이스를 만듭니다. 소스의 경우 CompareProjectDB 데이터베이스를 사용하며 대상의 경우 빈 데이터베이스를 만듭니다.

  • 두 데이터베이스의 스키마를 비교합니다. 스키마를 비교하여 데이터베이스 간의 구조적 차이를 찾아 표 형식으로 표시하고 이러한 차이점을 표현하는 DDL 스크립트를 생성합니다.

  • 동기화 스크립트를 검사합니다. DDL 스크립트를 확인하고 편집한 후에 실행할 수 있습니다.

  • 대상 데이터베이스를 업데이트합니다. DDL 스크립트를 실행하여 대상의 스키마를 변경할 수 있습니다.

사전 요구 사항

다음 제품을 설치해야 합니다.

  • SQL Server 2008

  • 대상 데이터베이스 서버에서 데이터베이스를 만들고 업데이트할 수 있는 권한

  • Visual Studio Premium 또는 Visual Studio Ultimate

간단한 데이터베이스 만들기

다음 작업을 수행하여 간단한 데이터베이스를 만듭니다.

  • 데이터베이스 스키마가 포함된 스크립트 만들기

  • 데이터베이스 프로젝트 만들기 및 스키마 가져오기

  • 격리된 개발 환경에 데이터베이스 프로젝트 배포

데이터베이스 스키마가 포함된 스크립트 만들기

스키마를 가져올 수 있는 원본 스크립트를 만들려면

  1. 파일 메뉴에서 새로 만들기를 가리키고 파일을 클릭합니다.

    새 파일 대화 상자가 나타납니다.

  2. 범주 목록에서 일반이 아직 강조 표시되지 않은 경우 클릭합니다.

  3. 템플릿 목록에서 SQL 파일을 클릭한 다음 열기를 클릭합니다.

    Transact-SQL 편집기가 열립니다.

  4. 다음 Transact-SQL 코드를 복사하여 Transact-SQL 편집기에 붙여넣습니다.

    PRINT N'Creating Sales...';
    GO
    CREATE SCHEMA [Sales]
        AUTHORIZATION [dbo];
    GO
    PRINT N'Creating Sales.Customer...';
    GO
    CREATE TABLE [Sales].[Customer] (
        [CustomerID]   INT IDENTITY (1, 1) NOT NULL,
        [CustomerName] NVARCHAR (40) NOT NULL,
        [YTDOrders] INT NOT NULL,
        [YTDSales] INT NOT NULL
    );
    GO
    PRINT N'Creating Sales.Orders...';
    GO
    CREATE TABLE [Sales].[Orders] (
        [CustomerID] INT NOT NULL,
        [OrderID] INT IDENTITY (1, 1) NOT NULL,
        [OrderDate] DATETIME NOT NULL,
        [FilledDate] DATETIME NULL,
        [Status] CHAR (1) NOT NULL,
        [Amount] INT NOT NULL
    );
    GO
    PRINT N'Creating Sales.Def_Customer_YTDOrders...';
    GO
    ALTER TABLE [Sales].[Customer]
        ADD CONSTRAINT [Def_Customer_YTDOrders] DEFAULT 0 FOR [YTDOrders];
    GO
    PRINT N'Creating Sales.Def_Customer_YTDSales...';
    GO
    ALTER TABLE [Sales].[Customer]
        ADD CONSTRAINT [Def_Customer_YTDSales] DEFAULT 0 FOR [YTDSales];
    GO
    PRINT N'Creating Sales.Def_Orders_OrderDate...';
    GO
    ALTER TABLE [Sales].[Orders]
        ADD CONSTRAINT [Def_Orders_OrderDate] DEFAULT GetDate() FOR [OrderDate];
    GO
    PRINT N'Creating Sales.Def_Orders_Status...';
    GO
    ALTER TABLE [Sales].[Orders]
        ADD CONSTRAINT [Def_Orders_Status] DEFAULT 'O' FOR [Status];
    GO
    PRINT N'Creating Sales.PK_Customer_CustID...';
    GO
    ALTER TABLE [Sales].[Customer]
        ADD CONSTRAINT [PK_Customer_CustID] PRIMARY KEY CLUSTERED ([CustomerID] ASC) WITH (ALLOW_PAGE_LOCKS = ON, ALLOW_ROW_LOCKS = ON, PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, STATISTICS_NORECOMPUTE = OFF);
    GO
    PRINT N'Creating Sales.PK_Orders_OrderID...';
    GO
    ALTER TABLE [Sales].[Orders]
        ADD CONSTRAINT [PK_Orders_OrderID] PRIMARY KEY CLUSTERED ([OrderID] ASC) WITH (ALLOW_PAGE_LOCKS = ON, ALLOW_ROW_LOCKS = ON, PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, STATISTICS_NORECOMPUTE = OFF);
    GO
    PRINT N'Creating Sales.FK_Orders_Customer_CustID...';
    GO
    ALTER TABLE [Sales].[Orders]
        ADD CONSTRAINT [FK_Orders_Customer_CustID] FOREIGN KEY ([CustomerID]) REFERENCES [Sales].[Customer] ([CustomerID]) ON DELETE NO ACTION ON UPDATE NO ACTION;
    GO
    PRINT N'Creating Sales.CK_Orders_FilledDate...';
    GO
    ALTER TABLE [Sales].[Orders]
        ADD CONSTRAINT [CK_Orders_FilledDate] CHECK ((FilledDate >= OrderDate) AND (FilledDate < '01/01/2010'));
    GO
    PRINT N'Creating Sales.CK_Orders_OrderDate...';
    GO
    ALTER TABLE [Sales].[Orders]
        ADD CONSTRAINT [CK_Orders_OrderDate] CHECK ((OrderDate > '01/01/2005') and (OrderDate < '01/01/2020'));
    GO
    PRINT N'Creating Sales.uspCancelOrder...';
    GO
    CREATE PROCEDURE [Sales].[uspCancelOrder]
    @OrderID INT
    AS
    BEGIN
    DECLARE @Delta INT, @CustomerID INT
    BEGIN TRANSACTION
        SELECT @Delta = [Amount], @CustomerID = [CustomerID]
         FROM [Sales].[Orders] WHERE [OrderID] = @OrderID;
    
    UPDATE [Sales].[Orders]
       SET [Status] = 'X'
    WHERE [OrderID] = @OrderID;
    
    UPDATE [Sales].[Customer]
       SET
       YTDOrders = YTDOrders - @Delta
        WHERE [CustomerID] = @CustomerID
    COMMIT TRANSACTION
    END
    GO
    PRINT N'Creating Sales.uspFillOrder...';
    GO
    CREATE PROCEDURE [Sales].[uspFillOrder]
    @OrderID INT, @FilledDate DATETIME
    AS
    BEGIN
    DECLARE @Delta INT, @CustomerID INT
    BEGIN TRANSACTION
        SELECT @Delta = [Amount], @CustomerID = [CustomerID]
         FROM [Sales].[Orders] WHERE [OrderID] = @OrderID;
    
    UPDATE [Sales].[Orders]
       SET [Status] = 'F',
           [FilledDate] = @FilledDate
    WHERE [OrderID] = @OrderID;
    
    UPDATE [Sales].[Customer]
       SET
       YTDSales = YTDSales - @Delta
        WHERE [CustomerID] = @CustomerID
    COMMIT TRANSACTION
    END
    GO
    PRINT N'Creating Sales.uspNewCustomer...';
    GO
    CREATE PROCEDURE [Sales].[uspNewCustomer]
    @CustomerName NVARCHAR (40)
    AS
    BEGIN
    INSERT INTO [Sales].[Customer] (CustomerName) VALUES (@CustomerName);
    SELECT SCOPE_IDENTITY()
    END
    GO
    PRINT N'Creating Sales.uspPlaceNewOrder...';
    GO
    CREATE PROCEDURE [Sales].[uspPlaceNewOrder]
    @CustomerID INT, @Amount INT, @OrderDate DATETIME, @Status CHAR (1)='O'
    AS
    BEGIN
    DECLARE @RC INT
    BEGIN TRANSACTION
    INSERT INTO [Sales].[Orders] (CustomerID, OrderDate, FilledDate, Status, Amount) 
         VALUES (@CustomerID, @OrderDate, NULL, @Status, @Amount)
    SELECT @RC = SCOPE_IDENTITY();
    UPDATE [Sales].[Customer]
       SET
       YTDOrders = YTDOrders + @Amount
        WHERE [CustomerID] = @CustomerID
    COMMIT TRANSACTION
    RETURN @RC
    END
    GO
    
  5. 파일 메뉴에서 다른 이름으로 SqlQuery_1.sql 저장을 클릭합니다.

    다른 이름으로 파일 저장 대화 상자가 나타납니다.

  6. 개체 이름에 SampleImportScript.sql을 입력합니다.

    컴퓨터의 아무 위치에나 파일을 저장할 수 있습니다. 다음 절차에서 이 스크립트를 사용해야 하므로 저장 위치를 기록해 둡니다.

  7. 저장을 클릭합니다.

  8. 파일 메뉴에서 솔루션 닫기를 클릭합니다.

    다음에는 데이터베이스 프로젝트를 만들고 앞에서 만든 스크립트에서 스키마를 가져옵니다.

데이터베이스 프로젝트 만들기 및 스키마 가져오기

데이터베이스 프로젝트를 만들려면

  1. 파일 메뉴에서 새로 만들기를 가리킨 다음 프로젝트를 클릭합니다.

    새 프로젝트 대화 상자가 나타납니다.

  2. 설치된 템플릿에서 데이터베이스 노드를 확장하고 SQL Server를 클릭합니다.

  3. 템플릿 목록에서 SQL Server 2008 데이터베이스 프로젝트를 클릭합니다.

  4. 이름에 CompareProjectDB를 입력합니다.

  5. 솔루션 목록에서 솔루션 만들기가 아직 강조 표시되어 있지 않은 경우 클릭합니다.

  6. 솔루션용 디렉터리 만들기 확인란이 아직 선택되어 있지 않은 경우 선택합니다.

  7. 소스 제어에 추가 확인란이 아직 선택 취소되어 있지 않은 경우 선택 취소하고 확인을 클릭합니다.

    데이터베이스 프로젝트가 만들어지고 솔루션 탐색기에 나타납니다. 다음에는 스크립트에서 데이터베이스 스키마를 가져옵니다.

스크립트에서 데이터베이스 스키마를 가져오려면

  1. 프로젝트 메뉴에서 스크립트 가져오기를 클릭합니다.

  2. 시작 페이지를 읽은 후 다음을 클릭합니다.

  3. 찾아보기를 클릭하고 SampleImportScript.sql 파일을 저장한 경로를 지정합니다.

  4. SampleImportScript.sql 파일을 두 번 클릭하고 마침을 클릭합니다.

    스크립트를 가져온 다음 해당 스크립트에 정의된 개체가 데이터베이스 프로젝트에 추가됩니다.

  5. 요약을 검토한 다음 마침을 클릭하여 작업을 완료합니다.

    참고

    Sales.uspFillOrder 프로시저에는 단위 테스트 연습에서 검색하여 수정할 의도적인 코딩 오류가 있습니다.

결과 프로젝트를 검사하려면

  1. 솔루션 탐색기에서 스키마 개체 자식 노드를 확장합니다.

  2. 계층 구조에서 스키마 개체 노드 아래에 있는 하위 노드를 탐색합니다.

    솔루션 탐색기에는 데이터베이스 개체를 정의하는 파일이 포함됩니다.

  3. 보기 메뉴에서 데이터베이스 스키마 뷰를 클릭합니다.

  4. 스키마 뷰에서 CompareProjectDB 노드를 확장합니다.

  5. 계층 구조에서 CompareProjectDB 노드 아래에 있는 하위 노드를 탐색합니다.

    스키마 뷰에는 솔루션 탐색기에 나타나는 파일에 정의되어 있는 개체가 포함됩니다.

격리된 개발 환경에 배포

다음에는 프로젝트를 배포하여 가져온 스키마만 있고 데이터는 없는 데이터베이스를 만듭니다. 격리된 개발 환경(또는 샌드박스)에서 이 데이터베이스를 만듭니다. 따라서 다른 작업으로 인한 방해를 받지 않고 데이터베이스를 개발하고 테스트할 수 있습니다.

데이터베이스 프로젝트를 구성하고 빌드하려면

  1. 솔루션 탐색기에서 데이터베이스 프로젝트 CompareProjectDB를 클릭합니다.

  2. 프로젝트 메뉴에서 CompareProjectDB 속성을 클릭합니다.

    프로젝트의 속성 대화 상자가 나타납니다.

  3. 배포 탭을 클릭합니다.

  4. 배포 설정 구성 목록에서 내 격리된 개발 환경을 클릭합니다. 격리된 개발 환경의 설정을 구성하면 테스트 또는 프로덕션 서버 등의 다른 환경에서 사용할 설정과는 다른 배포 설정을 사용할 수 있습니다.

  5. 배포 작업 목록에서 배포 스크립트(.sql)를 만들고 데이터베이스에 배포를 클릭합니다.

  6. 대상 데이터베이스 설정에서 편집을 클릭합니다.

    연결 속성 대화 상자가 표시됩니다.

  7. 만들려는 데이터베이스에 대한 연결 속성을 설정한 다음 확인을 클릭합니다.

    대상 연결 상자에 올바른 연결 문자열이 표시됩니다.

    경고

    테스트 서버, 개발 서버 또는 로컬 컴퓨터에서 데이터베이스를 만들어야 합니다. 프로덕션 서버를 지정하면 안 됩니다.

  8. 대상 데이터베이스 이름에 CompareProjectDB를 입력합니다.

  9. 배포 구성 파일 옆의 편집을 클릭합니다.

  10. 데이터가 손실되면 증분 배포 차단 확인란의 선택을 취소합니다.

    참고

    이 연습에서는 데이터베이스 단위 테스트의 일부로 배포하는 빈 데이터베이스에 대해 저장 프로시저를 테스트합니다. 격리된 개발 환경에서 저장 프로시저를 테스트하므로 기존 데이터를 유지할 필요는 없습니다.

  11. 파일 메뉴에서 모두 저장을 클릭합니다.

  12. 빌드 메뉴에서 솔루션 빌드를 클릭합니다.

    방금 설정한 속성에 따라 배포 스크립트가 빌드되는 방식이 결정됩니다. 출력 창에 빌드 상태가 표시되고 빌드: 성공 또는 최신 상태 1이 마지막 줄에 표시되어야 합니다.

데이터베이스 프로젝트를 배포하려면

  1. 솔루션 탐색기에서 데이터베이스 프로젝트 CompareProjectDB를 클릭합니다.

  2. 빌드 메뉴에서 CompareProjectDB 배포를 클릭합니다.

    경고

    테스트 서버, 개발 서버 또는 로컬 컴퓨터에 대해 이 배포를 실행해야 합니다. 프로덕션 서버를 지정하면 안 됩니다.

    데이터베이스 프로젝트가 새 데이터베이스로 배포됩니다. 출력 창에 배포 상태가 표시되고 **배포되었습니다.**가 마지막 줄에 표시되어야 합니다. 다음에는 이 배포된 데이터베이스와 비교할 수 있는 빈 데이터베이스를 만듭니다.

빈 데이터베이스 만들기

빈 데이터베이스를 만들려면

  1. 파일 메뉴에서 새로 만들기를 가리킨 다음 프로젝트를 클릭합니다.

    새 프로젝트 대화 상자가 나타납니다.

  2. 설치된 템플릿 목록에서 데이터베이스 노드를 확장하고 SQL Server를 클릭합니다.

  3. SQL Server 2008 마법사를 클릭합니다.

  4. 이름에 EmptyDB를 입력합니다.

  5. 나머지 필드의 기본값을 그대로 둔 다음 확인을 클릭합니다.

  6. 새 데이터베이스 프로젝트 마법사에서 빌드/배포 구성을 클릭합니다.

  7. 배포 작업 목록에서 배포 스크립트(.sql)를 만들고 데이터베이스에 배포를 클릭합니다.

  8. 대상 연결에서 찾아보기 단추를 클릭합니다.

  9. 빈 데이터베이스를 만들 데이터베이스 서버에 대한 연결을 지정한 다음 마침을 클릭합니다.

    EmptyDB라는 데이터베이스 프로젝트가 만들어져 솔루션 탐색기에 나타납니다.

  10. 솔루션 탐색기에서 데이터베이스 프로젝트 EmptyDB를 클릭합니다.

  11. 빌드 메뉴에서 EmptyDB 배포를 클릭합니다.

    데이터베이스 프로젝트가 빌드되어 지정한 서버에 배포됩니다.

두 데이터베이스의 스키마 비교

두 데이터베이스의 스키마를 비교하려면

  1. 데이터 메뉴에서 스키마 비교를 가리킨 다음 새 스키마 비교를 클릭합니다.

    소스 및 대상을 지정할 수 있도록 새 스키마 비교 대화 상자가 나타납니다. 이 대화 상자에서 소스와 대상이 있는 서버, 각 데이터베이스의 이름 및 각 데이터베이스에 연결할 때 사용할 인증 형식을 확인합니다.

    또한 스키마 비교 창이 백그라운드에서 열리며 Visual Studio에서는 이 창에 SchemaCompare1과 같은 이름을 자동으로 할당합니다.

  2. 소스 스키마에서 데이터베이스를 클릭한 다음 CompareProjectDB 데이터베이스에 해당하는 연결을 클릭합니다.

    해당 연결이 목록에 표시되지 않으면 새 연결을 클릭합니다. 연결 속성 대화 상자에서 CompareProjectDB 데이터베이스가 있는 서버, 해당 데이터베이스에 연결할 때 사용할 인증 형식 및 해당 데이터베이스 자체를 지정합니다. 끝마쳤으면 확인을 클릭합니다.

    참고

    연결을 설정한 후 솔루션 탐색기데이터 연결 아래에 연결이 나타납니다.

  3. 대상 스키마에서 데이터베이스를 클릭한 다음 EmptyDB 데이터베이스에 해당하는 연결을 클릭합니다.

    해당 연결이 목록에 표시되지 않으면 새 연결을 클릭합니다. 연결 속성 대화 상자에서 EmptyDB 데이터베이스가 있는 서버, 해당 데이터베이스에 연결할 때 사용할 인증 형식 및 해당 데이터베이스 자체를 지정합니다. 끝마쳤으면 확인을 클릭합니다.

  4. 옵션을 클릭하여 비교할 개체, 무시할 차이 유형 및 생성된 업데이트 스크립트에 포함할 내용을 지정합니다.

    참고

    데이터베이스를 비교할 때 SQLCMD 변수는 지정하지 않습니다.

  5. 일반 탭에서 비교 옵션 노드를 확장합니다.

  6. 파일 및 로그 파일의 파일 이름과 경로 무시를 선택합니다.

  7. 확인을 클릭합니다.

  8. 확인을 클릭합니다.

    스키마 비교가 시작됩니다.

    참고

    데이터 메뉴를 열고 스키마 비교를 가리킨 다음 스키마 비교 중지를 클릭하여 진행 중인 비교를 중지할 수 있습니다.

    차이로 간주할 내용을 결정하고 업데이트 스크립트를 만드는 방법을 변경하는 옵션을 구성할 수 있습니다. 자세한 내용은 방법: 데이터베이스 스키마 비교 옵션 설정을 참조하십시오.

    비교가 완료되면 두 데이터베이스 간의 구조적 차이가 스키마 비교 창의 표에 나타납니다. 이 표에는 두 데이터베이스 중 하나에 있는 각 데이터베이스 개체에 대한 행이 표시됩니다. 데이터베이스 개체는 테이블, 뷰, 저장 프로시저, 역할 등의 형식별로 구성됩니다.

대상 데이터베이스 업데이트

대상의 스키마를 업데이트하는 방법에는 스키마 비교 창에서 직접 스키마를 업데이트할 수도 있고 Transact-SQL 편집기를 사용할 수도 있습니다. 이 단원에서는 두 가지 옵션에 대해 모두 설명합니다.

스키마 비교를 실행한 다음에는 구조적 차이가 스키마 비교 창의 표에 나타납니다. 이 표에는 CompareProjectDB(소스 데이터베이스) 열의 각 개체에 대해 두 데이터베이스의 해당 개체를 동기화하는 데 필요한 업데이트 작업 열의 작업이 표시됩니다. 이 경우 대상은 기본 개체를 제외하고 비어 있으므로 상태 열에 대부분 최신 상태가 포함되며 업데이트 작업 열에는 대부분 만들기 작업이 포함됩니다.

대상에 업데이트 쓰기

스키마 비교 창에 나열된 업데이트 작업을 사용하여 대상의 스키마를 업데이트할 수 있습니다. 이 작업을 수행하려면 대상 데이터베이스에 업데이트 쓰기의 단계를 수행하십시오.

스크립트 보기 및 대상에 업데이트 쓰기

업데이트 스크립트를 내보내고 검사하여 가능한 경우 변경한 다음 결과 스크립트를 사용하여 대상 데이터베이스를 동기화할 수 있습니다. 이 작업을 수행하려면 동기화 스크립트 검사 및 실행의 단계를 수행하십시오.

대상 데이터베이스에 업데이트 쓰기

참고

프로덕션 또는 개발 서버에 업데이트를 쓰기 전에 대상 데이터베이스를 백업하는 것이 좋습니다. 일부 스키마 변경 내용은 단일 트랜잭션에서 수행될 수 없으므로 업데이트 작업을 시작한 다음 취소할 경우 데이터가 손실될 수 있습니다. 예를 들어 대상 데이터베이스의 테이블이 재작성을 위한 준비 과정에서 삭제될 수 있습니다. 이때 업데이트를 취소하면 테이블이 손실될 수 있습니다. 이 연습에서는 빈 개발 데이터베이스를 업데이트합니다. 따라서 대상 데이터베이스를 백업하지 않습니다.

대상 데이터베이스에 업데이트를 쓰려면

  1. 비교 결과 목록에서 SQL 파일 노드로 스크롤합니다.

  2. CompareProjectDB 파일 및 CompareProjectDB_Log 파일의 경우 업데이트 작업을 만들기에서 건너뛰기로 변경합니다.

    참고

    동일한 데이터베이스 서버의 두 데이터베이스를 비교하는 경우에는 대상 데이터와 로그 파일이 이미 있으며 소스 데이터베이스에서 사용 중이므로 동기화가 실패합니다. 이 연습에서는 파일에 대한 업데이트를 건너뛰고 데이터베이스의 내용을 동기화합니다.

  3. EmptyDB 파일 및 EmptyDB_log 파일의 경우 업데이트 작업을 삭제에서 건너뛰기로 변경합니다.

    참고

    소스 데이터베이스에서 파일을 만들지 않으므로 대상 데이터베이스의 파일을 삭제하면 안 됩니다. 이 연습에서는 파일에 대한 업데이트를 건너뛰고 데이터베이스의 내용을 동기화합니다.

  4. 스키마 비교 도구 모음에서 업데이트 쓰기를 클릭합니다.

    스키마 비교 창에 나열되었던 업데이트 작업이 실행됩니다. 이 동기화로 인해 소스의 스키마와 일치하도록 대상의 스키마가 변경됩니다.

    참고

    업데이트 작업이 진행 중일 때 데이터 메뉴를 열어 스키마 비교를 가리킨 다음 대상에 쓰기 중지를 클릭하여 해당 작업을 취소할 수 있습니다.

    선택한 업데이트가 적용되었는지 확인하기 위해 비교를 다시 실행하려는 경우에는 스키마 비교 도구 모음에서 새로 고침을 클릭합니다.

동기화 스크립트 검사 및 실행

동기화 스크립트를 검사하려면

  1. 데이터 메뉴에서 스키마 비교, 내보내기를 차례로 가리킨 다음 편집기를 클릭합니다.

    또는 스키마 비교 도구 모음에서 편집기로 내보내기를 클릭할 수도 있습니다.

    오프라인 모드에서 Transact-SQL 편집기가 열리고 Transact-SQL 동기화 스크립트가 표시됩니다. 이 창에는 Server.CompareProjectDB - SchemaUpdate_EmptyDB_1.sql과 같은 이름이 지정되며 Transact-SQL 스크립트가 표시됩니다. 이 창에 대한 쓰기 및 읽기 권한이 모두 있으므로 스크립트를 변경할 수 있습니다. 변경하는 경우 파일 메뉴를 연 다음 저장을 클릭합니다. 파일을 저장할 때 파일 경로 및 이름을 지정할 수 있습니다.

  2. Transact-SQL 편집기 도구 모음에서 SQLCMD 모드를 클릭합니다.

    SQLCMD 모드를 사용하도록 설정하지 않은 경우 스크립트를 실행할 때 오류가 발생합니다.

  3. 두 데이터베이스의 스키마를 동기화하려면 Transact-SQL 편집기 도구 모음에서 SQL 실행을 클릭하거나 F5 키를 눌러 이 스크립트를 실행합니다.

    데이터베이스에 연결 대화 상자가 나타납니다.

  4. EmptyDB 데이터베이스에 해당하는 연결을 클릭하고 확인을 클릭합니다.

    경고

    다른 데이터베이스에 대해 업데이트 스크립트를 실행하려고 하면 의도하지 않은 결과가 발생할 수 있습니다.

    비교 작업은 자동으로 새로 고쳐지지 않습니다. 선택한 업데이트가 적용되었는지 확인하기 위해 비교를 다시 실행하려는 경우에는 스키마 비교 도구 모음에서 새로 고침을 클릭해야 합니다.

다음 단계

이제 두 데이터베이스의 데이터를 비교할 수 있습니다. 자세한 내용은 방법: 두 데이터베이스의 데이터 비교 및 동기화를 참조하십시오.

참고 항목

작업

방법: 두 데이터베이스의 데이터 비교 및 동기화

방법: 데이터베이스 스키마 비교

연습: 두 데이터베이스의 데이터 비교

연습: 데이터베이스 및 데이터베이스 프로젝트의 스키마 비교

개념

하나 이상의 테이블에 있는 데이터를 참조 데이터베이스에 있는 데이터와 비교하고 동기화

Visual Studio에서 데이터베이스와 데이터 계층 응용 프로그램 만들기 및 관리