как получить полный набор результатов из SSMS

17

Как получить полное содержимое строк в SQL Server Management Studio?

Если вы используете «результаты для сетки», данные кодируются, поэтому такие вещи, как разрывы строк, теряются. Если вы делаете «результат в файл» или «результат в текст», текст ограничен 8192 символами.

ПРИМЕЧАНИЕ. У меня есть решение, но я использую SO для документирования этого. Если у вас есть лучший ответ, не стесняйтесь публиковать его.

    
задан javamonkey79 19.01.2012 в 17:55
источник

4 ответа

36

Я передал его в XML

select @variable_with_long_text
 as [processing-instruction(x)] FOR XML PATH 

Бит processing-instruction должен прекратить его выдавать такие символы, как < , &lt;

    
ответ дан Martin Smith 19.01.2012 в 18:02
источник
  • Простое литье в xML даст вам все данные? Интересно. –  javamonkey79 19.01.2012 в 19:00
  • Чтобы это сработало, мне сначала пришлось выбрать данные столбца в переменной, а затем выполнить преобразование XML, как описано. –  danjuggler 04.01.2017 в 23:44
  • можно ли это превратить в умную функцию или что-то, что я могу запомнить –  Simon_Weaver 22.06.2017 в 20:18
4

Я разработал надстройку для SSMS - «SSMSBoost» и недавно добавил функцию «Копировать ячейку 1: 1» (доступную в контекстном меню Grid). Он вернет вам все данные из ячейки без каких-либо изменений и без усечения.

    
ответ дан Andrei Rantsevich 20.06.2012 в 02:24
источник
2

Просто используйте по умолчанию «Результаты для сетки», затем щелкните правой кнопкой мыши на результатах сетки и выберите «Сохранить результаты как ...» CSV.

Полный контент будет сохранен в файле, даже с разрывами строк. Некоторые столбцы varchar (max) имели содержание около 3 МБ, и он был сохранен ОК, а не усечен.

    
ответ дан Vlad S. 21.11.2017 в 17:03
источник
0

Один из администраторов баз данных в моей компании предложил возможное решение - поместить данные во временную переменную, а затем использовать функцию печати в цикле, например:

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
    
ответ дан javamonkey79 19.01.2012 в 18:00
источник