Ответ 1
Я передал его в XML
select @variable_with_long_text
as [processing-instruction(x)] FOR XML PATH
Бит processing-instruction
должен остановить его, указывая такие символы, как <
- <
Как получить полное содержимое строк в SQL Server Management Studio?
Если вы используете "результаты для сетки", данные кодируются, поэтому такие вещи, как разрывы строк, теряются. Если вы делаете "результат в файл" или "результат в текст", текст ограничен 8192 символами.
ПРИМЕЧАНИЕ. У меня есть решение, но я использую SO для документирования этого. Если у вас есть лучший ответ, не стесняйтесь публиковать его.
Я передал его в XML
select @variable_with_long_text
as [processing-instruction(x)] FOR XML PATH
Бит processing-instruction
должен остановить его, указывая такие символы, как <
- <
Я разработал надстройку для SSMS - "SSMSBoost" и недавно добавил функцию "Копировать ячейку 1:1" (доступную в контекстном меню Grid). Он вернет вам все данные из ячейки без каких-либо изменений и без усечения.
Просто используйте по умолчанию "Результаты для сетки", затем щелкните правой кнопкой мыши на результатах сетки и выберите "Сохранить результаты как..." CSV.
Полный контент будет сохранен в файле, даже с разрывами строк. Некоторые столбцы varchar (max) имели содержание около 3 МБ, и он был сохранен ОК, а не усечен.
Один из администраторов баз данных в моей компании предложил возможное решение поместить данные во временную переменную, а затем использовать функцию печати в цикле, например:
DECLARE @contents varchar(MAX)
SET @contents = ''
SELECT @contents = @contents + Contents + CHAR(13)
FROM dbo.tFOO
WHERE someConition
DECLARE @tContents TABLE (id int IDENTITY, contents varchar(MAX))
WHILE @contents LIKE '%' + CHAR(13) + '%'
BEGIN
PRINT SUBSTRING(@contents, 0, CHARINDEX(CHAR(13), @contents))
SET @contents = SUBSTRING(@contents, CHARINDEX(CHAR(13), @contents)+1, LEN(@contents) - CHARINDEX(CHAR(13), @contents))
END