基于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>

作为解决方法,您可以定义新配置:

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版本。

希望这可以帮助。

以上是关于基于SQL Server版本的SQL CLR条件编译的主要内容,如果未能解决你的问题,请参考以下文章

SQL server .Net CLR 文化

SQL CLR 在 SQL Server 中随机失败

复制 SQL Server CLR 函数

SQL Server 2008 CLR 聚合函数

SQL Server 2017 上的 CLR 严格安全性

CLR SQL Server UDF 问题