#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.
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 по-другому и имеет более высокий порог для усечения данных.