2017-12-13 1 views
1

많은 프로젝트에서 .NET Framework 기반의 Visual Studio 조건부 컴파일을 사용하고 있습니다.SQL Server 버전을 기반으로 한 SQL CLR 조건부 컴파일

하지만 이제는 선택한 대상 SQL Server 버전을 기반으로 Visual Studio SQL CLR 프로젝트를 조건부로 컴파일해야 할 필요가 생겼습니다.

할 방법이 있습니까? 선택적으로 컴파일 된 DLL에 특정 .sql 파일 (저장 프로 시저) 및 C# .cs 파일 (SQL CLR 저장 프로 시저)을 포함하는 방법이 필요합니다.

당신의 도움에 감사드립니다!

편집 :

은 내가 SQLCLR 프로젝트의 .cs 부분에 대한 해결책을 발견했다. 나는이 스택 오버플로 question 에 따라 닷넷 프레임 워크를 검출하는 동일한 단계를 수행 한 후 다음과 같은 VersionSpecificSymbols.Common.prop 파일 라인에 추가 : '상태 = "$ (DSP.Contains (

< DefineConstants 100 ')) ==이 진정한; "SQL Server 버전에 따라 저장 프로 시저를 필터링"> $ (DefineConstants) SQL2008 </DefineConstants >

나는 아직도 할 수있는 방법을 찾고 있어요 "

답변

0

할 방법이 있습니까?

내가 알기로는, 당신이 그렇게 할 수 없을까 두렵습니다. 우리가 알다시피,이 SQL Server 버전을 얻을 수있는 몇 가지 방법입니다 :

How to check SQL Server version

그러나 우리는 MSBuild를 통해 프로젝트 파일 .sqlproj에서 SQL Server 버전을 가져올 수 없습니다. 그래서 우리는 같이 직접 .sql 파일 (저장 프로 시저)와 C# .cs 파일 (SQL의 CLR 저장 프로 시저)에 대한 조건을 사용할 수 없습니다 :

: 해결 방법으로

<ItemGroup> 
    <Compile Include="SqlStoredProcedure1.cs" Condition=" '$(sqlversion)' == 'sql server 2012' " /> 
    </ItemGroup> 

, 새로운 구성을 정의 할 수 있습니다

예 :

enter image description here

는 SqlServer2012는 다음 .sql 파일 (프로 시저) 및 C# .cs 파일이 조건 (SQL CLR 프로 시저)을 설정할

<ItemGroup> 
    <Build Include="Procedure1.sql" Condition=" '$(Configuration)' == 'SqlServer2012' "/> 
    </ItemGroup> 

    <ItemGroup> 
    <Compile Include="SqlStoredProcedure1.cs" Condition=" '$(Configuration)' == 'SqlServer2012' " /> 
    </ItemGroup> 

이 경우 두 파일은 구성을 SqlServer2012로 선택한 경우에만 포함됩니다.

참고 :이 방법의 한계는 미리 SQL Server 버전을 알아야한다는 것입니다.

희망이 도움이됩니다.

+0

방금 ​​부분 솔루션으로 제 질문을 편집했지만 다른 구성을 사용하기위한 아이디어는 제가 고려하지 않은 것입니다. 유일한 문제는 각 구성에서 .sql 파일을 지정해야한다는 것입니다. 사전 배포 스크립트 작업을 위해 더 많은 것을 기대했습니다. – SQLHTTP

+0

@SQLHTTP, 괜찮습니다. 답을 공유하고 답을 표시 할 수 있으므로 다른 커뮤니티에서 솔루션을 쉽게 찾을 수 있습니다. –

1

추가 답변이 없으므로 필자의 부분 솔루션을 포함합니다.SQLCLR 프로젝트 CS 부 :

< :

는 I이 같은 VersionSpecificSymbols.Common.prop 파일 행에 첨가 한 다음,이 스택 오버플 question 따라 닷넷 프레임 워크를 검출 동일한 절차를 따라 DefineConstants 조건 = "$ (DSP.Contains ('100')) == 참"$ > (DefineConstants) SQL2008 </DefineConstants >

< DefineConstants 상태 = "$ (DSP.Contains ('110')) = = 참 "$ > (DefineConstants) SQL2012 </DefineConstants >

< DefineConstants 상태 ="$ (DSP.Contains ('120')) == 참 "$ > (DefineConstants) SQL2014 </DefineConstants >

< DefineConstants 상태 = "$ (DSP.Contains ('130')) == 참"$ > (DefineConstants) SQL2016 </DefineConstants >