T-SQL(varchar(max)vs CLR(string,SqlString,SqlChars)?

时间:2011-09-28 08:08:28

标签: c# tsql sql-server-2005 types sqlclr

我有一个问题,我无法解决。我正在使用SQL Server 2005,C#CLR来使用外部dll。问题在于参数的长度。我需要使用函数参数类型varchar(max)。如果在C#代码中我使用stringSqlSring,我就不能使用varchar(max)的T-SQL类型,而只使用varchar(4000)的{​​{1}}。我需要说,当我需要使用超过4000个符号时,情况就是这样,所以我需要知道,我需要使用哪种C#类型nvarchar(4000)

我已经阅读了很多文章,其中有几篇文章说,为此,我可以使用varchar(max)。但!我有字符串操作。如何处理SqlCharsstring,然后转换为SqlString? (可能是SqlCharsSqlChars.ToString())。

我没有找到任何C#代码。

3 个答案:

答案 0 :(得分:12)

您需要做的是将SqlFacet(MaxSize = -1)属性添加到参数:

[return: SqlFacet(MaxSize = -1)]
[Microsoft.SqlServer.Server.SqlFunction(IsDeterministic = true)]
public static SqlString YourSqlFunction([SqlFacet(MaxSize = -1)]SqlString sourceSS)
{ return new }

答案 1 :(得分:4)

我找到了答案。不仅仅是我问过这个问题。我必须更专心地阅读帖子......

可以在这里阅读http://social.msdn.microsoft.com/Forums/is/sqlnetfx/thread/391ebb98-e1b5-47fc-a72d-9f1e39829e3a CLR兼容性问题解决起来并不困难。

我一直希望使用varchar(max)并尝试使用C#类型stringSqlStringSqlChars。需要使用T-SQL nvarchar(max),您可以使用任何C#类型stringSqlStringSqlChars

当然nvarchar两次占用的空间超过varchar

答案 2 :(得分:0)

尝试使用长度-1。像这样:

cmd.Parameters.Add("@param", SqlDbType.VarChar, -1).Value = "hdfiophdopigherog";