由于SQLCLR存储过程的复杂性,我决定创建一个SQLCLR存储过程来替换Server存储过程。
问题:在编写CLR存储过程时,是否有任何数据类型或API限制?如果是的话,谁能给我个提示吗。
我计划使用var, List<T>, DataTable, DataRow[]和Queue以及少量的LINQ扩展方法。
发布于 2014-09-21 21:07:08
这实际上是一个相当开放的问题,因为在.NET / CLR代码本身中可以做什么,以及什么数据类型可以/应该用作输入/输出参数,都存在细微差别。
从基础开始,细微差别取决于您正在使用的Server版本,以及询问的是哪个特定问题。
.NET框架版本
.NET框架库与数据类型映射
Server 2005
支持.NET框架库(:)
数据类型:
Server 2008、2008 R2、2012、2014和2016年:
支持的.NET框架库 (2个库,如下所示)
数据类型:
其他。
Sql*类型(例如,SqlInt32),那么使用它;不要在C#方法中使用.NET类型作为输入参数(例如int或Int32)。只有在没有要映射到的Server数据类型的.NET类型时,才使用本机Sql*类型。此异常的两个常见实例是使用object (可以是DbNull.Value)映射到SQL_VARIANT,使用DateTime / DateTime?映射到DATETIME2。PERMISSION_SET of UNSAFE将它们导入代码所在的数据库中。您还可能需要将数据库设置为TRUSTWORTHY ON,以便将它们设置为UNSAFE,因为从Microsoft提供的DLL创建非对称密钥似乎是不可能的(至少我无法找到)。List<T>、DataTable和DataRow[]时,我没有看到任何问题。Queue或var,但在使用它们时不会期望有任何问题。LINQ已经很多年了,但似乎还记得唯一的问题,就是它没有包含在Server 2005支持的框架库中,所以这对我没有用,因为我需要支持2005-2014年,但是对于那些不需要担心Server 2005的人来说,这应该是可以的。https://stackoverflow.com/questions/24306529
复制相似问题