ToString 转换截断 SQL CLR 中的 SqlString 值

ToString Conversion Truncating SqlString Value in SQL CLR

我正在使用 C# 构建一个 SQL 服务器 CLR 过程。因为我试图将 SqlString 参数转换为字符串,但结果被截断了。

这是代码的简化版本。参数 "MyParam" 包含超过 200 个字符的字符串,但由于某些原因 ToString() 将其截断为 100 个字符。有任何想法吗?或者更好的方法来转换 SqlString 参数。

[Microsoft.SqlServer.Server.SqlProcedure]
public static void MySqlClrProcedure(SqlString MyParam)
{
    SqlContext.Pipe.Send("Test: " + MyParam.ToString());
}
  1. 尝试始终使用 Sql* 类型中的 Value 属性。在您的情况下,它将是:MyParam.ValueValue 属性 在所有 Sql* 类型和 returns 预期的 .NET 类型中可用。

  2. SqlString 中没有固有的截断,因为它可以支持 NVARCHAR(MAX)SqlContext.Pipe.Send() 应限制为 4000 个 UTF-16 字符(8000 字节),因为它是一个 PRINT 语句。

    很可能您的 T-SQL 包装器对象将其输入参数定义为 NVARCHAR(100)。将其更改为 NVARCHAR(4000) 甚至 NVARCHAR(MAX)。如果您使用 Visual Studio / SSDT 来构建它,您可以向输入参数添加一个 SqlFacet 装饰器以使其使用最大长度:MySqlClrProcedure([SqlFacet(MaxLength=4000)] SqlString MyParam)

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

Stairway to SQLCLR

另外:SQLCLR Info