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());
}
尝试始终使用 Sql*
类型中的 Value
属性。在您的情况下,它将是:MyParam.Value
。 Value
属性 在所有 Sql*
类型和 returns 预期的 .NET 类型中可用。
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 的更多信息,请查看我正在撰写的有关此主题的系列文章:
另外:SQLCLR Info
我正在使用 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());
}
尝试始终使用
Sql*
类型中的Value
属性。在您的情况下,它将是:MyParam.Value
。Value
属性 在所有Sql*
类型和 returns 预期的 .NET 类型中可用。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 的更多信息,请查看我正在撰写的有关此主题的系列文章:
另外:SQLCLR Info