Больше, чем значения VARCHAR (MAX) в SQL Server

#sql #sql-server

#sql #sql-сервер

Вопрос:

У меня есть несколько таблиц с более чем 700 столбцами / 1000 столбцами.

Теперь я хочу отобразить все столбцы из этой таблицы для ISNULL(col1,0) форматирования, потому что, когда я использую PIVOT / UNPIVOT и если есть какие NULL -то значения, они не будут преобразованы в NULL и станут пустыми строками. Поэтому я пытаюсь заменить эти NULL s на 0 .

В этом примере я использовал sysobjects таблицу, чтобы вы могли попробовать ее в своей ssms. Результат этого является неполным, поскольку ни VARCHAR(MAX) того, ни NVARCHAR(MAX) другого недостаточно. Как мне получить здесь все строки, а не несколько строк?

 DECLARE @colsUnpivot VARCHAR(MAX)

SET @colsUnPivot = STUFF((
                       SELECT ','    'ISNULL('   QUOTENAME(name)   ', 0) AS ' 
                                    QUOTENAME(name) 
                       FROM  sysobjects t  
                       FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'') 
PRINT @colsUnPivot

 set @query = 'SELECT id,code_name,lkp_value
 FROM  
 (
 SELECT unitid,institution,city,state,zip, '  @colsUnpivot '
  FROM sysobjects) AS cp
  UNPIVOT (lkp_value for code_name  IN (' @colsUnPivot ')
  ) AS up' 
 --PRINT @Query
 --PRINT @Query1
   exec(@query)
  

Я имею в виду, что приведенный выше код не имеет смысла, но я не могу создать то же самое, что и у меня, поскольку я должен использовать здесь sysobjects .

Но приведенный выше код выдает ошибку:

Сообщение 102, уровень 15, состояние 1, строка 6
Неправильный синтаксис рядом с ‘(‘.

И это потому, что данных так много, и они усекаются.

Вот что говорит моя ПЕЧАТЬ,

     ,ISNULL([opd_
  

Поэтому я все еще думаю, что это усечение.

Комментарии:

1. Ваш вывод усекается SSMS или вы столкнулись с какой-то другой проблемой? Можете ли вы предоставить более подробную информацию? Я очень сомневаюсь, что это так, как утверждает subj.

2. PRINT и SELECT приведет к усечению отображения больших результатов, но вы все равно сможете выбрать полное значение. Вы просто не сможете увидеть это в SSMS.

3. Да. Что они сказали. varchar(max) содержит до 2 ГБ данных. Я не вижу, что у вас там происходит.

4. да, когда я печатаю в SSMS, он усекается.

5. попробуйте установить @colsUnPivot = ‘ ‘ перед вашим утверждением (с пробелом между галочками

Ответ №1:

Ваша проблема в том, что команда PRINT усекает данные для отображения в SSMS.

Я бы предложил оставить его как XML и выполнить SELECT, если вам просто нужно просмотреть данные в SSMS без усечения:

    DECLARE @colsUnpivot xml

   SET @colsUnPivot = (SELECT ','    'ISNULL('   QUOTENAME(name)   ', 0) AS ' 
                                    QUOTENAME(name) 
                       FROM  sysobjects t  
                       FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)')

   SELECT @colsUnPivot
  

SSMS обрабатывает вывод XML по-другому и имеет более высокий порог для усечения данных.

Ответ №2:

Используйте SELECT вместо print в вашем SQL.

 SELECT @colsUnPivot
  

Кроме того, убедитесь, что эти значения максимальны в результатах в таблице:
Результаты для параметров сетки