C# ToString转换截断SQL CLR中的SqlString值
我正在使用C#构建一个SQL Server CLR过程。在这种情况下,我试图将C# ToString转换截断SQL CLR中的SqlString值,c#,sql-server,tostring,sqldatatypes,sqlclr,C#,Sql Server,Tostring,Sqldatatypes,Sqlclr,我正在使用C#构建一个SQL Server CLR过程。在这种情况下,我试图将SqlString参数转换为string,但结果被截断 下面是代码的简化版本。参数“MyParam”包含超过200个字符的字符串,但由于某种原因,ToString()将其截断为100个字符。有什么想法吗?或者转换SqlString参数的更好方法 [Microsoft.SqlServer.Server.SqlProcedure] public static void MySqlClrProcedure(SqlString
SqlString
参数转换为string,但结果被截断
下面是代码的简化版本。参数“MyParam”包含超过200个字符的字符串,但由于某种原因,ToString()
将其截断为100个字符。有什么想法吗?或者转换SqlString
参数的更好方法
[Microsoft.SqlServer.Server.SqlProcedure]
public static void MySqlClrProcedure(SqlString MyParam)
{
SqlContext.Pipe.Send("Test: " + MyParam.ToString());
}
Sql*
类型的值
属性。在您的情况下,它将是:MyParam.Value
。Value
属性在所有Sql*
类型中都可用,并返回预期的.NET类型
SqlString
中没有固有的截断,因为它可以支持NVARCHAR(MAX)
。和SqlContext.Pipe.Send()
应限制为4000个UTF-16字符(8000字节),因为它是一个PRINT
语句
T-SQL包装器对象的输入参数很可能定义为NVARCHAR(100)
。将其更改为NVARCHAR(4000)
甚至NVARCHAR(MAX)
。如果您正在使用Visual Studio/SSDT构建此过程,则可以向输入参数添加一个SqlFacet
decorator,使其使用最大长度:MySqlClrProcedure([SqlFacet(MaxLength=4000)]SqlString MyParam)
另外:如果您可以共享一个。请显示您的SQL Server SP定义。