C# ToString转换截断SQL CLR中的SqlString值

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

我正在使用C#构建一个SQL Server CLR过程。在这种情况下,我试图将
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)

  • 要了解有关一般使用SQLCLR的更多信息,请查看我正在撰写的关于此主题的系列文章:


    另外:

    如果您可以共享一个。请显示您的SQL Server SP定义。