基于SQL Server版本的SQL CLR条件编译
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于SQL Server版本的SQL CLR条件编译相关的知识,希望对你有一定的参考价值。
我一直在使用基于.Net Framework的Visual Studio条件编译来完成我的许多项目。
但是现在我遇到了根据所选目标SQL Server版本在Visual Studio SQL CLR项目中有条件地编译的需要。
有没有办法做到这一点?我需要一种方法可选地在编译的DLL中包含某些.sql文件(存储过程)和C#.cs文件(SQL CLR存储过程)
谢谢你的帮助!
编辑:
我找到了SQLCLR项目的.cs部分的解决方案。我按照相同的步骤检测.Net Framework,根据此Stack Overflow question,然后添加到VersionSpecificSymbols.Common.prop文件行,如下所示:
<DefineConstants Condition =“$(DSP.Contains('100'))== True”> $(DefineConstants); SQL2008 </ DefineConstants>
我仍在寻找一种基于SQL Server版本“过滤”存储过程的方法
由于没有提供额外的答案,我将包括我对SQLCLR项目的.cs部分的部分解决方案:
我按照相同的步骤检测.Net Framework,根据此Stack Overflow question,然后添加到VersionSpecificSymbols.Common.prop文件行,如下所示:
<DefineConstants Condition =“$(DSP.Contains('100'))== True”> $(DefineConstants); SQL2008 </ DefineConstants>
<DefineConstants Condition =“$(DSP.Contains('110'))== True”> $(DefineConstants); SQL2012 </ DefineConstants>
<DefineConstants Condition =“$(DSP.Contains('120'))== True”> $(DefineConstants); SQL2014 </ DefineConstants>
<DefineConstants Condition =“$(DSP.Contains('130'))== True”> $(DefineConstants); SQL2016 </ DefineConstants>
有没有办法做到这一点?
据我所知,恐怕你做不到。我们知道,有几种方法可以获得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>
作为解决方法,您可以定义新配置:
例如,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版本。
希望这可以帮助。
以上是关于基于SQL Server版本的SQL CLR条件编译的主要内容,如果未能解决你的问题,请参考以下文章