5

해결하려는 문제는 빌드 구성에 따라 다른 스크립트를 작성하는 것입니다. 오프라인 개발 및 단위 SQL 데이터베이스 프로젝트 : 빌드 구성에 따라 다른 스크립트 빌드

  • LocalDb 버전은
  • 엔터프라이즈 버전이 연결된 서버시기에 대한 전망을 테스트 연결 링크 서버와

    • 엔터프라이즈 버전 :

      우리는이 개 SQL Server 인스턴스을 말해봐 LocalDB는 이러한 뷰를 로컬 테이블로 대체합니다.

      이러한 연결된 서버보기 및 로컬 테이블에는 동일한 이름 및 필드 집합이 있습니다. 기본적으로 빌드에 포함되지 않습니다 (빌드 동작 = 없음). 대신 프로젝트 파일의 BeforeBuild 대상에 빌드에 포함됩니다.

      <Target Name="BeforeBuild"> 
      
          <ItemGroup Condition=" '$(Configuration)' == 'LocalDb'"> 
           <Build Include="Local_Tables\*.sql" /> 
          </ItemGroup> 
      
          <ItemGroup Condition=" '$(Configuration)' != 'LocalDb' "> 
           <Build Include="Linked_Server_Views\*.sql" /> 
          </ItemGroup> 
      
      </Target> 
      

      그러나 문제는 우리가 처음 LocalDb에 대한 프로젝트를 빌드하고 엔터프라이즈 구성을위한 프로젝트를 빌드하려고하면 비주얼 스튜디오는 DB 모델을 캐시하고 있다는 점이다 - 비주얼 스튜디오 출력 오류 :

      오류 : SQL71508 다음 모델에 이미 동일한 이름을 가진 요소가 있습니다.

      솔루션을 닫거나 열 때 프로젝트를로드하고 프로젝트를 다시로드하면 Visual Studio에서 dbmdl 파일을 다시 만들고 오류없이 엔터프라이즈 구성이 빌드됩니다.

      내 가정은 dbmdl 캐시를 새로 고치면 오류없이 원활하게 빌드됩니다.

      열거 나 다시로드 SQL Server 데이터베이스 프로젝트를 비주얼 스튜디오 2012에서, 그것은 here 설명으로 직렬화 및 캐시 DB를 모델로 확장 dbmdl를 가진 파일을 생성

      . dbmdl 파일 오락 비주얼 스튜디오의 순간에서

      는 다음과 같은 출력 :

      프로젝트를 다시로드하지 않고 프로젝트 XML 파일의 변경하지 않고 dbmdl 캐시를 새로 고침하려면 Visual Studio를 강제하는 방법
      Deserializing the project state for project 'MyProject.sqlproj'... 
      Detecting file changes for project 'MyProject.sqlproj'... 
      Deserialization has been completed for project 'MyProject.sqlproj'. 
      

      ?

      프로젝트 xml 파일의 BeforeBuild 또는 AfterBuild 대상에 명령을 배치하는 dbmdl 캐시를 새로 고치는 방법이 있습니까?

      또는 문제의 전체적인 접근 방식이 잘못되어 빌드 구성에 따라 다른 스크립트를 빌드하는 또 다른 방법이 있습니까?

    답변

    4

    복합 프로젝트를 사용할 때 또 다른 옵션이있을 수 있습니다. Jamie Thompson은 여기에 그들에 대한 블로그 : http://sqlblog.com/blogs/jamie_thomson/archive/2013/03/10/deployment-of-client-specific-database-code-using-ssdt.aspx

    이렇게하면 환경 관련 코드로 기본 프로젝트를 만들고 추가 프로젝트를 묶을 수 있습니다. 릴리스 스크립트에서 몇 가지 검사를 수행하여 적절한 것을 배포 할 수 있습니다.

    1

    나는 이것과 SSDT로 처리하는 가장 좋은 방법에 대해 생각해 보았습니다.

    1. 는 각 에디션 제작 프로파일을 생성 -와 : 당신이 이전에 변경 사항을 게시에 대한 올바른 버전을 확인할 수 있다면 아마, 하지만을에 "최고"방법이 없어, 난이 생각 하는데요 연결된 서버없이.
    2. 데이터베이스를 포함하여 연결된 서버 이름을 포함 할 수 있도록 변수를 만듭니다. "[Server].
    3. 사용 권한, 연결된 서버 이름의 변수 등이 포함 된 연결된 서버보기에 대한 배포 후 스크립트 만들기
    4. 배포 후 스크립트에서 " 에디션 "변수를 사용하는 경우 연결된 서버를 사용하는 경우 프로젝트의 네이티브 비 링크 서버 뷰를 삭제하거나 다시 만들어 연결된 서버에서 사용할 수 없거나 로컬 뷰와 서버에 대한 빈 문자열로 변수를 설정하십시오/DB를 사용하면 아마도 한 세트의 코드 만 사용할 수 있습니다.

    이 방법은보기를 코드 검사 할 수 없다는 단점이 있지만 연결된 서버보기를 저장할 위치를 한 곳으로 줄 것입니다. 한 판 e를 배포합니다. SSDT가 각 게시 작업에서 다시 작성된다는 의미의 변경 사항을 처리하게하는 대신 Drop/Create를 사용하여 릴리스해야합니다. 그래도 당신이 찾고있는 해결책을 줄 수 있다고 생각합니다.

    +0

    답장을 보내 주셔서 감사합니다. 나는 아직도 내 질문에 대한 해결책이 없다. 나는 다음 프로젝트를 위해 당신의 충고를 시도 할 것이다. 하지만 테이블/뷰 생성 생성을 Post-Deploy 스크립트로 옮기는 것보다는 다른 객체가 해당 테이블/뷰를 참조하기 때문에 빌드 중 오류가 발생합니다. –

    +1

    글쎄, 기술적으로 프로젝트의 "로컬"뷰를 남겨 두어 모든 것이 빌드되도록 한 다음, 링크 된 서버에 대해서만 사용하도록 수정 된 포스트 배포 섹션을 추가하면됩니다. 나는 그것을 다루는 것이 최선의 방법이 아니라는 것에 동의하지만 그렇게한다면 그렇게 할 수 있습니다. –

    +1

    복합 프로젝트를 사용할 때 또 다른 옵션이있을 수 있습니다. Jamie Thompson이 여기에 블로그를 올렸습니다. http://sqlblog.com/blogs/jamie_thomson/archive/2013/03/10/deployment-of-client-specific-database-code-using-ssdt.aspx –

    관련 문제