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

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

我已经阅读了很多文章,其中有几篇说,为此我可以使用SqlChars 。 但! 我有字符串操作。 如何使用stringSqlString进行操作然后转换为SqlChars ? (可能是SqlChars.ToString()SqlChars.ToSqlString() )。

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

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

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

我找到了答案。 不只是我问过这个问题。 我必须更专注地阅读post……

可以在这里阅读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多。

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

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