繁体   English   中英

SQLCLR存储过程数据类型

[英]SQLCLR Stored procedure datatypes

由于它的复杂性,我决定创建一个SQLCLR存储过程来替换SQL Server存储过程。

问题:编写CLR存储过程时,是否有任何数据类型或API限制? 如果是这样,有人可以给我任何建议。

我打算使用var, List<T>, DataTable, DataRow[]Queue以及一些LINQ扩展方法。

实际上,这是一个相当开放的问题,因为.NET / CLR代码本身可以做什么以及可以/应该将哪些数据类型用作输入/输出参数都存在细微差别。

从基础开始,细微差别取决于您所使用的SQL Server版本以及所询问的特定问题。

.NET Framework版本

  • 不允许使用混合模式: SQL Server CLR主机内只能使用一个CLR版本,并且CLR版本取决于SQL Server的版本,不能更改
  • SQL Server 2005、2008和2008 R2:静态绑定到CLR 2.0
  • SQL Server 2012、2014和2016:静态绑定到CLR 4.0

.NET Framework库和数据类型映射

SQL Server 2005

支持的.NET Framework库

  • CustomMarshalers
  • Microsoft.VisualBasic程序
  • Microsoft.VisualC
  • mscorlib程序
  • 系统
  • 系统配置
  • System.Data
  • System.Data.OracleClient的
  • System.Data.SqlXml
  • System.Deployment
  • System.Security
  • System.Transactions的
  • System.Web.Services
  • 的System.Xml

资料类型:

SQL Server 2008、2008 R2、2012、2014和2016:

支持的.NET Framework库 :( 添加了两个库,如下所述

  • CustomMarshalers
  • Microsoft.VisualBasic程序
  • Microsoft.VisualC
  • mscorlib程序
  • 系统
  • 系统配置
  • System.Data
  • System.Data.OracleClient的
  • System.Data.SqlXml
  • System.Deployment
  • System.Security
  • System.Transactions的
  • System.Web.Services
  • 的System.Xml
  • System.Core.dll( 在SQL Server 2008中添加
  • System.Xml.Linq.dll( 在SQL Server 2008中添加

资料类型:

杂项。

  • 关于数据类型:如果有可用的Sql*类型(例如SqlInt32 ),则使用它;否则,使用它。 不要在C#方法中使用.NET类型作为输入参数(例如intInt32 )。 仅当没有Sql*类型映射到SQL Server数据类型时,才使用本机.NET类型。 此异常的两个常见实例是使用object (可以是DbNull.Value )映射到SQL_VARIANT ,以及DateTime / DateTime? 哪个映射到DATETIME2
  • 您可以参考/使用第三方组件以及框架库上面列出的那些之外,但你需要用它们导入PERMISSION_SETUNSAFE进入你的代码还驻留的数据库。 您可能还需要将数据库设置为TRUSTWORTHY ON ,以便将它们设置为UNSAFE因为从Microsoft提供的DLL中似乎不可能(无论如何,我也找不到)。
  • 一般来说,任何针对.NET 2.0编写的,使其可以在SQL Server 2005中使用的东西都应在任何更高版本的SQL Server中都可以使用。 我还没有遇到在2005年的.NET 2.0中可以使用的功能,但是在2005年以后的任何版本中都无法使用。
  • 您不能将表值参数(TVP)传递到基于SQLCLR的对象(存储过程,函数等)中。 有关CLR存储过程的MSDN文档中指出了这一点以及其他一些有用的信息。
  • 使用List<T>DataTableDataRow[]时,我没有看到任何问题。
  • 我没有使用Queuevar但是使用它们时不会出现任何问题。
  • 自从我尝试LINQ已经有好几年了,但似乎回想起唯一的问题是它没有包含在SQL Server 2005支持的框架库集中,因此对我不起作用,因为我需要支持2005-2014,但是对于任何不需要担心SQL Server 2005的人都应该可以。
  • 有关SQLCLR主题的更多详细信息,我在SQL Server Central中有一系列文章(需要免费注册): SQLCLR的阶梯

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM