SSDT 배포에서 특정 테이블 제외


11

schema에 모든 것이있는 기존 데이터베이스가 dbo있습니다. 스키마를 사용하여 추가하는 객체가 포함 된 SSDT 프로젝트가 있습니다foo

프로젝트에서 다음과 같은 테이블이 있습니다.

CREATE table foo.a (
    id INT NOT NULL
        CONSTRAINT [PK_foo_a] PRIMARY KEY CLUSTERED
        CONSTRAINT [FK_foo_a] FOREIGN KEY REFERENCES [dbo].[a],
    desc NVARCHAR(50) NOT NULL
)

dbo.a에 따라 다릅니다. dbo.a에는 다른 열에 대한 외래 키인 많은 열이 있습니다. 기본 스키마를 유지 관리하는 다른 사람이 dbo.a를 변경할 수 있습니다.

dbo.a를 다음과 같이 간단하게 저장하고 싶습니다.

CREATE table dbo.a (
    id INT NOT NULL
        CONSTRAINT [PK_a] PRIMARY KEY CLUSTERED
)

따라서 내부적으로 구축되지만 배포되지는 않습니다. 가능합니까?


배포에 Schema Compare를 사용하지 않습니까? 변경 사항이 감지되면 목록에서 해당 테이블을 선택 취소하면됩니다.
Dave

momnent에서 스키마 비교를하고 있지만 랩톱에서 개발자 서버까지는 실제 게시 배포를 수행하고 싶지 않습니다.
저스틴 친애하는

답변:


11

AgileSqlClub SqlPackage 배포 필터를 사용할 수 있습니다 .

간략한 지침에서 재현 에 원래 문서 에 의한 에드 엘리엇 :

  1. agilesqlclub.codeplex.com 에서 필터를 다운로드하십시오.
  2. DLL와 같은 폴더에 넣습니다sqlpackage.exe
  3. 다음 명령 행 매개 변수를 배치에 추가하십시오.

    /p:AdditionalDeploymentContributors=AgileSqlClub.DeploymentFilterContributor /p:AdditionalDeploymentContributorArguments="SqlPackageFilter=IgnoreSchema(BLAH)"

    BLAH스키마의 어떤 것도 전개, 삭제 또는 변경하지 않습니다 .

자세한 내용은 원본 기사 를 참조 하십시오.


foo.publish.xml 파일을 통해 devenv.exe에서 배포하면 sqlpackage.exe가 생성되지 않습니다. 내가 그것을 할 수있는 방법이 있습니까?
저스틴 친애하는

내가하는 일은 devenv를 사용하여 변경 사항을 배포하는 대신 프로젝트를 빌드하고 스크립트를 사용하여 sqlpackage.exe를 구동하는 것입니다.이 방법으로 배포 기여자를 쉽게 사용하고 다른 환경에서 사용할 수있는 것과 동일한 스크립트를 테스트 할 수 있습니다 당신의 ci 과정에서!
Ed Elliott

이것은 내게 큰 도움이 되었기 때문에 특정 스키마 만 배포해야했습니다. 미래에 다른 사람은 참고 ignoreschema 방법은 정규식 IgnoreSchema에 걸릴 수 있습니다 (^ (\ B는 (i) BLAH \ B) *?!?.) 모든하지만 BLAH 스키마 무시
andyb952

3

데이터베이스의 일부만 관리하는 SSDT것은 어렵습니다. 종속성이없는 경우 단순히 개체를 삭제하지 않고 프로젝트에 포함시키지 않을 수 있습니다. 종속성이 있지만 관리하고 싶지 않기 때문에 시스템을 속 여야한다고 생각합니다.

한 가지 방법이 떠 오릅니다. 지금 테스트 할 수있는 능력이 없으며이 방법이 아닌 "유사한"방법 만 사용했습니다.

옵션 1:

  1. 그 안에 새 데이터베이스 프로젝트를 작성하십시오 dbo.a.

  2. 3 부분으로 명명 된 표를 참조하십시오. 이름의 첫 부분에는 SQLCMD 변수를 사용하십시오. 예 :[$(DatabaseName)].dbo.a.

  3. foo데이터베이스를 배포하지 마십시오 .

  4. 공개 파일 또는 cli 인터페이스 $(DatabaseName)를 통해 실제 데이터베이스와 동일한 이름을 사용하십시오.


이 시도가는
저스틴 Dearing

@JustinDearing 배포 필터 방법을 사용하면 사용 사례에 정확히 맞습니다 (즉, 모든 테이블을 소스 제어에 유지하고 일부는 배포시 무시)
Ed Elliott

0

이를위한 "깨끗한"기본 제공 방법 (2016 년 기준)은 저장된 스키마 비교 파일을 사용하는 것입니다. 당신은 할 수 있습니다 :

  1. 데이터베이스 프로젝트에서-> 대상 서버에서 스키마 비교를 수행하고 업데이트를 위해 제외 할 오브젝트를 선택 취소하십시오.
  2. 스키마 비교를 * .scmp 파일로 저장
  3. 필요한 경우 .scmp 파일을 복사하여 붙여 넣어 필요에 따라 다른 환경에 대한 버전을 생성하고 XML 편집기에서 편집하여 소스 (출력 dacpac 파일 빌드를 가리 키도록), 연결 등을 변경하거나 섹션에서 항목을 수동으로 추가 / 수정할 수 있습니다. .
  4. 게시에 적절한 .scmp 파일을 사용하도록 dacpac 배포 / 게시 명령 매개 변수를 구성하십시오. 예 : SqlPackage.exe / Action : publish /SourceFile:c:\project\schema_compare.scmp

자세한 내용은 https://devblogs.microsoft.com/ssdt/schema-compare-in-sqlpackage-and-the-data-tier-application-framework-dacfx/

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.