是否可能在SQL Server CLR项目中创建具有nvarchar(max)类型输入参数的CLR存储过程?
如果您定义存储过程:
<Microsoft.SqlServer.Server.SqlProcedure()> _
Public Shared Sub MyProcedure(ByVal param1 As String)
那么当您部署它时,param1的类型为NVarchar(4000)。是否有一种方法使其成为NVarchar(max)?
是否可能在SQL Server CLR项目中创建具有nvarchar(max)类型输入参数的CLR存储过程?
如果您定义存储过程:
<Microsoft.SqlServer.Server.SqlProcedure()> _
Public Shared Sub MyProcedure(ByVal param1 As String)
那么当您部署它时,param1的类型为NVarchar(4000)。是否有一种方法使其成为NVarchar(max)?
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
。
SqlChars
映射到NVARCHAR(MAX)
,并将SqlString
映射到NVARCHAR(4000)
。从至少VS 2012开始,我认为SqlString
和SqlChars
都映射到NVARCHAR(MAX)
。此外,即使在那些早期,指示T-SQL数据类型选项的首选方法也是通过SqlFacet
属性(如Guillermo的答案中所示)。 - Solomon Rutzky