【问题标题】:How to create CLR stored procedure with Nvarchar(max) parameter?如何使用 Nvarchar(max) 参数创建 CLR 存储过程?
【发布时间】:2011-05-11 22:58:47
【问题描述】:
是否可以在 SQL Server CLR 项目中创建具有 nvarchar(max) 类型输入参数的 CLR 存储过程?
如果定义存储过程:
_
公共共享
Sub MyProcedure(ByVal param1 As String)
然后,当您部署它时,param1 的类型为 NVarchar(4000)。有没有办法让它 NVarchar(max)?
【问题讨论】:
标签:
sql-server
types
sqldatatypes
sqlclr
【解决方案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】:
【讨论】:
-
嗨达米安。不是你自己的错,这个答案现在已经过时且毫无意义。只是 Visual Studio / SSDT 的早期版本默认 SqlChars 映射到 NVARCHAR(MAX) 和 SqlString 映射到 NVARCHAR(4000)。至少从 VS 2012 开始,我认为 SqlString 和 SqlChars 都映射到 NVARCHAR(MAX)。此外,即使在早期,指示 T-SQL 数据类型选项的首选方法是通过SqlFacet 属性(如Guillermo's answer 所示)。