Объединение большого количества строк в одну строку - PullRequest
2 голосов
/ 15 сентября 2010

У меня есть таблица, содержащая большое количество строк. В каждой строке есть 2 столбца, которые мне нужно использовать - первый - это HTML-форматирование, а второй - текст. Мне нужно объединить все эти строки в одно строковое значение, чтобы я мог отправить эту массивную строку по электронной почте. Из-за большого количества строк я не могу использовать переменную VARCHAR - я должен использовать текст. Текущее решение состоит в том, чтобы использовать курсор для чтения всех строк, а затем вставить во временную таблицу с одним столбцом типа text, а затем просто добавить к одной строке в этой таблице.

Проблема в том, что строка выглядит обрезанной после примерно 33000 символов. Я понятия не имею, почему это происходит.

РЕДАКТИРОВАТЬ: Я воспользовался некоторыми советами из ответов, приведенных здесь, и изменил решение для использования VARCHAR (MAX). Однако я все еще получаю отсечение, но очень странным образом. Не похоже, что переменная переполняется, просто не добавляются все значения.

DECLARE @Result VARCHAR(MAX)
SET @Result = ''

SELECT @Result = @Result + ltrim(isnull(format,'')) + '&nbsp;' + text + '<BR></TD></TR><TR><TD CLASS="GEN" align="left" BGCOLOR="#E9ECFD">' 
FROM SomeTable

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * является странным то, что, если я уберу бит, куда добавляю все эти html в конце строки, все будет работать нормально. Я даже сначала вставил все в таблицу tmp, а затем выбрал эту конкатенацию - все равно не повезло. Таблица tmp содержит правильные значения (включая html), но последняя переменная - нет.

Ответы [ 3 ]

1 голос
/ 15 сентября 2010

Из-за большого количества строк I не могу использовать переменную VARCHAR - у меня есть использовать текст

В SQL Server 2005 имеется поддержка VARCHAR (MAX) и NVARCHAR (MAX) для обработки больших строк длиной более 8000 (4000 для NVARCHAR) символов, до ~ 2 ГБ. Таким образом, начиная с 2005 года вы должны использовать те, которые вместо TEXT / NTEXT устаревают в будущей версии SQL Server.

Эта поддержка MAX делает вещи проще, чем необходимость иметь дело с TEXT, так что давайте вихрем.

1 голос
/ 15 сентября 2010

Редактировать : Я думаю, что основная проблема в том, что вы используете varbinary(16) в качестве указателя для обновления значения text. 16-разрядное целое число со знаком закончится на отметке 32 768, так что это, вероятно, ваша проблема.

Попробуйте использовать указатель bigint вместо varbinary

Также обратите внимание, что UPDATETEXT устарел, и Microsoft рекомендует использовать вместо него UPDATE с предложением WRITE - см. Здесь .

Пример из этой страницы MSDN :

UPDATE Production.Document
SET DocumentSummary .WRITE (N'features',28,10)

Аналогичным образом, text находится на выходе, и вам, вероятно, следует использовать varchar(max) вместо.

0 голосов
/ 15 сентября 2010

Вам лучше записать соединенные строки в файл. Чтобы записать строку в файл, вы можете использовать SP следующим образом: http://www.simple -talk.com / код / ​​WorkingWithFiles / spWriteStringTofile.txt

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...