首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQLCLR存储过程数据类型

SQLCLR存储过程数据类型
EN

Stack Overflow用户
提问于 2014-06-19 12:22:48
回答 1查看 462关注 0票数 1

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

问题:在编写CLR存储过程时,是否有任何数据类型或API限制?如果是的话,谁能给我个提示吗。

我计划使用var, List<T>, DataTable, DataRow[]Queue以及少量的LINQ扩展方法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-21 21:07:08

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

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

.NET框架版本

  • 不允许混合模式:只能在Server主机中使用单个CLR版本,并且CLR版本取决于Server的版本,因此不能更改
  • Server 2005、2008和2008 R2:静态绑定到CLR2.0
  • Server 2012、2014和2016:静态绑定到CLR4.0

.NET框架库与数据类型映射

Server 2005

支持.NET框架库()

  • CustomMarshalers
  • Microsoft.VisualBasic
  • Microsoft.VisualC
  • 米斯尔利布
  • 系统
  • System.Configuration
  • System.Data
  • System.Data.OracleClient
  • System.Data.SqlXml
  • System.Deployment
  • System.Security
  • System.Transactions
  • System.Web.Services
  • System.Xml

数据类型:

  • 细节:Server数据类型及其.NET框架等价物
  • 包含更多信息的主页(即处理NULL等):.NET框架中的Server数据类型

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

支持的.NET框架库 (2个库,如下所示)

  • CustomMarshalers
  • Microsoft.VisualBasic
  • Microsoft.VisualC
  • 米斯尔利布
  • 系统
  • System.Configuration
  • System.Data
  • System.Data.OracleClient
  • System.Data.SqlXml
  • System.Deployment
  • System.Security
  • System.Transactions
  • System.Web.Services
  • System.Xml
  • System.Core.dll (在Server 2008中添加)
  • System.Xml.Linq.dll (在Server 2008中添加)

数据类型:

  • 细节:Server数据类型及其.NET框架等价物
  • 包含更多信息的主页(即处理NULL等):.NET框架中的Server数据类型

其他。

  • 关于数据类型:如果有可用的Sql*类型(例如,SqlInt32),那么使用它;不要在C#方法中使用.NET类型作为输入参数(例如intInt32)。只有在没有要映射到的Server数据类型的.NET类型时,才使用本机Sql*类型。此异常的两个常见实例是使用object (可以是DbNull.Value)映射到SQL_VARIANT,使用DateTime / DateTime?映射到DATETIME2
  • 除了上面列出的程序集之外,您还可以引用/使用第三方程序集和框架库,但随后需要使用PERMISSION_SET of UNSAFE将它们导入代码所在的数据库中。您还可能需要将数据库设置为TRUSTWORTHY ON,以便将它们设置为UNSAFE,因为从Microsoft提供的DLL创建非对称密钥似乎是不可能的(至少我无法找到)。
  • 一般说来,任何针对Server 2.0编写的、使其在Server 2005中工作的内容都应该在Server的任何后期版本中工作。在2005年的.NET 2.0版本中,我还没有遇到在2005年以后的任何版本中都无法工作的东西。
  • 不能将表值参数(TVP)传递给基于SQLCLR的对象(存储过程、函数等)。这一点,以及其他一些有用的信息,在CLR存储过程的MSDN文档中都有说明。
  • 在使用List<T>DataTableDataRow[]时,我没有看到任何问题。
  • 我没有使用Queuevar,但在使用它们时不会期望有任何问题。
  • 我尝试LINQ已经很多年了,但似乎还记得唯一的问题,就是它没有包含在Server 2005支持的框架库中,所以这对我没有用,因为我需要支持2005-2014年,但是对于那些不需要担心Server 2005的人来说,这应该是可以的。
  • 有关SQLCLR主题的更多细节,我有一系列关于Server (需要免费注册)的文章:通往SQLCLR的楼梯
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24306529

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档