由于其复杂性,我决定创建一个SQLCLR存储过程来替换SQL Server存储过程。
问题:在编写CLR存储过程时是否存在任何数据类型或API限制?如果是这样,有人可以给我任何提醒。
我打算使用var, List<T>, DataTable, DataRow[]
和Queue
以及一些LINQ
扩展方法。
答案 0 :(得分:2)
这实际上是一个相当开放的问题,因为在.NET / CLR代码本身可以做什么以及哪些数据类型可以/应该用作输入/输出参数都有细微差别。
从基础开始,细微差别取决于您使用的SQL Server版本以及要求的特定问题。
<强> Supported .NET Framework Libraries 强>
数据类型:
Supported .NET Framework Libraries:( 2个库添加如下所示)
数据类型:
Sql*
类型可用(例如SqlInt32
),则使用它;不要在C#方法中使用.NET类型作为输入参数(例如int
或Int32
)。如果要映射的SQL Server数据类型没有Sql*
类型,则仅使用本机.NET类型。此异常的两个常见实例是使用object
(可以DbNull.Value
)映射到SQL_VARIANT
,DateTime
/ DateTime?
映射到{{{ 1}}。DATETIME2
PERMISSION_SET
的{{1}}导入到您的代码中的数据库中驻留。您可能还需要将数据库设置为UNSAFE
,以便将它们设置为TRUSTWORTHY ON
,因为从Microsoft提供的DLL创建Asymmetric Key似乎不可能(不是我能找到) UNSAFE
,List<T>
和DataTable
时,我没有遇到任何问题。DataRow[]
或Queue
,但在使用时不会出现任何问题。var
以来已经多年了,但似乎回想起唯一的问题是它没有包含在SQL Server 2005支持的框架库集中,所以这对我来说不起作用,因为我需要支持2005年至2014年,但对于任何不需要担心SQL Server 2005的人来说应该可以。