如何使用 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 开始,我认为 SqlString
和 SqlChars
都映射到 NVARCHAR(MAX)
。此外,即使在早期,指示 T-SQL 数据类型选项的首选方法是通过SqlFacet
属性(如Guillermo's answer 所示)。以上是关于如何使用 Nvarchar(max) 参数创建 CLR 存储过程?的主要内容,如果未能解决你的问题,请参考以下文章
`sp_executesql` 真的接受 `nvarchar(max)` 参数吗?