如何使用 Nvarchar(max) 参数创建 CLR 存储过程?

Posted

技术标签:

【中文标题】如何使用 Nvarchar(max) 参数创建 CLR 存储过程?【英文标题】:How to create CLR stored procedure with Nvarchar(max) parameter? 【发布时间】:2011-05-11 22:58:47 【问题描述】:

是否可以在 SQL Server CLR 项目中创建具有 nvarchar(max) 类型输入参数的 CLR 存储过程?

如果定义存储过程:

_ 公共共享 Sub MyProcedure(ByVal param1 As String)

然后,当您部署它时,param1 的类型为 NVarchar(4000)。有没有办法让它 NVarchar(max)?

【问题讨论】:

【参考方案1】:

您可以使用SqlFacet 属性。如果你想要NVARCHAR(MAX) 类型作为参数,那么你应该这样做:

[SqlProcedure]
public static void storedProcedure1([SqlFacet(MaxSize=-1)] String param) .. 

如果您需要它作为用户定义函数中的返回值:

[return:SqlFacet(MaxSize=-1)]
[SqlFunction]
public static String userFunction1() ... 

MaxSize=-1 表示NVARCHAR 的大小将为MAX

【讨论】:

【参考方案2】:

将您的参数定义为SqlChars 类型,而不是字符串。见Handling Large Object Parameters in the CLR

【讨论】:

嗨达米安。不是你自己的错,这个答案现在已经过时且毫无意义。只是 Visual Studio / SSDT 的早期版本默认 SqlChars 映射到 NVARCHAR(MAX)SqlString 映射到 NVARCHAR(4000)。至少从 VS 2012 开始,我认为 SqlStringSqlChars 都映射到 NVARCHAR(MAX)。此外,即使在早期,指示 T-SQL 数据类型选项的首选方法是通过SqlFacet 属性(如Guillermo's answer 所示)。

以上是关于如何使用 Nvarchar(max) 参数创建 CLR 存储过程?的主要内容,如果未能解决你的问题,请参考以下文章

`sp_executesql` 真的接受 `nvarchar(max)` 参数吗?

复制活动自动创建 nvarchar(max) 列

NVARCHAR(MAX) 的最大长度

如何将列从 nvarchar(max) 更改为 nvarchar(50)

在 asp.net 核心中使用 NVarChar

nvarchar(max) 仍然被截断