T-SQL (varchar (max) vs CLR (строка, SqlString, SqlChars)?
У меня проблема, которую я не могу решить. Я использую SQL Server 2005, С# CLR для использования внешней dll. Проблема заключается в длине параметра. Мне нужно использовать как тип параметра функции varchar(max)
. Если в коде С# я использую string
, SqlSring
, я не могу использовать тип T-SQL varchar(max)
, просто varchar(4000)
of nvarchar(4000)
. Мне нужно сказать, что это могут быть ситуации, когда мне нужно использовать более 4000 символов, поэтому мне нужно знать, какой тип С# мне нужно использовать для varchar(max)
.
Я прочитал много статей, и некоторые из них говорят, что для этого я могу использовать SqlChars
. Но! У меня есть манипуляции со строками. Как я могу иметь действия с string
или SqlString
, а затем преобразовать в SqlChars
? (Возможно SqlChars.ToString()
или SqlChars.ToSqlString()
).
Я не нашел для этого кода С#.
Ответы
Ответ 1
Что вам нужно сделать, это добавить атрибут SqlFacet (MaxSize = -1) к параметру:
[return: SqlFacet(MaxSize = -1)]
[Microsoft.SqlServer.Server.SqlFunction(IsDeterministic = true)]
public static SqlString YourSqlFunction([SqlFacet(MaxSize = -1)]SqlString sourceSS)
{ return new }
Ответ 2
Я нашел ответ. Не только я спросил об этом вопросе. Я должен читать сообщения более внимательно...
Здесь можно прочитать http://social.msdn.microsoft.com/Forums/is/sqlnetfx/thread/391ebb98-e1b5-47fc-a72d-9f1e39829e3a Проблема совместимости с CLR решает не очень сложно.
В любое время я хотел использовать varchar(max)
и пытался использовать типы С# string
, SqlString
, SqlChars
. Необходимо использовать T-SQL nvarchar(max)
, и вы можете использовать любой из типов С# string
, SqlString
, SqlChars
!
Конечно, nvarchar
занимает больше места, чем varchar
в два раза.
Ответ 3
Попробуйте использовать длину -1
. Что-то вроде этого:
cmd.Parameters.Add("@param", SqlDbType.VarChar, -1).Value = "hdfiophdopigherog";