Прямая вставка произвольной строки varchar всегда должна работать:
create table MarkupTable(
id int identity(1,1) /*please don't berate me for using identity!*/
, markup varchar(max) /* this will use only the space taken by your markup string */
)
insert MarkupTable select '<html><b>demo</b></html>'
select * from MarkupTable
Теперь - вопрос: какой кусок кода кодирует вашу разметку ???
Некоторые стартовые места:
- Правильно ли вы используете объекты C #: SqlParameter (SqlDbType.VarChar) .Value = yourMarkupString;
- Вы где-нибудь используете FOR XML?
- Используете ли вы что-нибудь вроде Security.Escape (разметка)?
- Возвращается ли ваша строка как часть конверта XmlDocument или SOAP? (он будет экранирован сериализатором)
- Получаете ли вы дважды закодированную строку?
Попробуйте:
Server.HtmlDecode(Server.HtmlDecode(markupString));
Для требований к пространству:
- Вы можете запустить строку с помощью алгоритма удаления пробелов (все становится одним пробелом или табуляцией.
- Вы можете сжать текст и даже не хранить varchar (max), а varbinary (max)