Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Размер строки превышает допустимый максимум в 8060 байт  [new]
PulsarOnyx
Member

Откуда:
Сообщений: 8
Добрый день.

Динамически генерируется pivot запрос , в котором 151 столбец тип varchar(max), выдает ошибку ниже , Я понимаю это ограничение , если способы обойти его? Сам запрос изменить кардинально не могу , так как с pivot особо не разгонишься.

П.С. если уменьшить количество данных строке , то все работает.

часть запрос

select Convert(varchar(max),[FLD1],120) as FLD1, cast(sum(isnull(isnull([2014$2014-1$2014-01-01 00:00:001],0),0)) as varchar(max)) as [1] ,cas.......
FROM (SELECT FLD1,PRM1,PRM2,PRM3,convert(varchar(max),FLD2,120)+'$'+convert(varchar(max),FLD3,120)+'$'+convert(varchar(max),FLD4,120)+'1' as ResultCell1 FROM (SELECT FLD1,PRM1,PRM2,PRM3,convert(varchar(max),FLD2,120)+'$'+convert(varchar(max),FLD3,120)+'$'+convert(varchar(max),FLD4,120)+'1' as ResultCell1,convert(varchar(max),FLD2,120)+'$'+convert(varchar(max),FLD3,120)+'$'+convert(varchar(max),FLD4,120)+'2' as ResultCell2,convert(varchar(max),FLD2,120)+'$'+convert(varchar(max),FLD3,120)+'$'+convert(varchar(max),FLD4,120)+'3' as ResultCell3 FROM #temp ) AS QUERY PIVOT ( SUM(PRM1) FOR ResultCell1 IN ( .......


Ошибка

Сообщение 8618, уровень 16, состояние 2, строка 1
Обработчику запросов не удалось предоставить план запроса, так как для этого требуется рабочая таблица, а минимальный размер ее строки превышает допустимый максимум в 8060 байт. Типичная причина, по которой требуется рабочая таблица, - наличие в запросе предложений GROUP BY или ORDER BY. Если в запросе присутствует предложение GROUP BY или ORDER BY, рассмотрите возможность уменьшения количества или размера полей в этих предложениях. Рассмотрите возможность использования префикса (LEFT()) или хэширования (CHECKSUM()) полей для группирования или префикса для упорядочивания. Однако следует принять во внимание, что это приведет к изменению поведения запроса.
20 окт 16, 14:36    [19804859]     Ответить | Цитировать Сообщить модератору
 Re: Размер строки превышает допустимый максимум в 8060 байт  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
PulsarOnyx,

а зачем везде?
автор
Convert(varchar(max),...
20 окт 16, 14:49    [19804917]     Ответить | Цитировать Сообщить модератору
 Re: Размер строки превышает допустимый максимум в 8060 байт  [new]
PulsarOnyx
Member

Откуда:
Сообщений: 8
TaPaK,
Это для эксперимента обычно, где флоан 20 знаков, текст 250.
20 окт 16, 14:52    [19804928]     Ответить | Цитировать Сообщить модератору
 Re: Размер строки превышает допустимый максимум в 8060 байт  [new]
PulsarOnyx
Member

Откуда:
Сообщений: 8
TaPaK,

пробовал convert(varchar(1)), ошибка все равно есть.
20 окт 16, 14:53    [19804933]     Ответить | Цитировать Сообщить модератору
 Re: Размер строки превышает допустимый максимум в 8060 байт  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37069
PulsarOnyx
TaPaK,

пробовал convert(varchar(1)), ошибка все равно есть.
Напишите select 1, точно никаокй ошибки не будет.

З.Ы. Упрощайте ваш запрос, не может сервер план построить
20 окт 16, 14:55    [19804942]     Ответить | Цитировать Сообщить модератору
 Re: Размер строки превышает допустимый максимум в 8060 байт  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Гавриленко Сергей Алексеевич
PulsarOnyx
TaPaK,

пробовал convert(varchar(1)), ошибка все равно есть.
Напишите select 1, точно никаокй ошибки не будет.

З.Ы. Упрощайте ваш запрос, не может сервер план построить

он не может засунуть во временную таблицу которую пытается создать план который не может создаться )
20 окт 16, 14:56    [19804945]     Ответить | Цитировать Сообщить модератору
 Re: Размер строки превышает допустимый максимум в 8060 байт  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
TaPaK
PulsarOnyx,

а зачем везде?
автор
Convert(varchar(max),...
VARCHAR(MAX) всё равно хранится как ссылка и много места в записи таблицы не занимает.
Лучше подумать, а нафига в запросе то и дело формируются сотни полей?!
20 окт 16, 14:57    [19804947]     Ответить | Цитировать Сообщить модератору
 Re: Размер строки превышает допустимый максимум в 8060 байт  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37069
TaPaK
он не может засунуть во временную таблицу которую пытается создать план который не может создаться )
В сообщении написано русским же языком: "Обработчику запросов не удалось предоставить план запроса "
20 окт 16, 14:57    [19804949]     Ответить | Цитировать Сообщить модератору
 Re: Размер строки превышает допустимый максимум в 8060 байт  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Гавриленко Сергей Алексеевич
TaPaK
он не может засунуть во временную таблицу которую пытается создать план который не может создаться )
В сообщении написано русским же языком: "Обработчику запросов не удалось предоставить план запроса "
потому что, не влазят результаты, в таблицу которую пытается создать план
20 окт 16, 15:00    [19804963]     Ответить | Цитировать Сообщить модератору
 Re: Размер строки превышает допустимый максимум в 8060 байт  [new]
PulsarOnyx
Member

Откуда:
Сообщений: 8
Для чего это. Пользователь клацает параметры отчета в интерфейсе, а Я уже создаю обновляемый эксель файл с помощью сиквела, Это делалось на С#, но open sdk xml для web, генерит файл , но им нужно обновляемый файл , как было в десктопном приложении + на сервере нет экселя.
20 окт 16, 15:04    [19804982]     Ответить | Цитировать Сообщить модератору
 Re: Размер строки превышает допустимый максимум в 8060 байт  [new]
PulsarOnyx
Member

Откуда:
Сообщений: 8
iap,
может на практики никто строить не будет, но в интерфейсе есть возможность выбора такого набора параметров, вот и тестирую...:(
20 окт 16, 15:06    [19804993]     Ответить | Цитировать Сообщить модератору
 Re: Размер строки превышает допустимый максимум в 8060 байт  [new]
invm
Member

Откуда: Москва
Сообщений: 9406
PulsarOnyx,

Покажите план запроса в формате sqlplan.
20 окт 16, 15:39    [19805138]     Ответить | Цитировать Сообщить модератору
 Re: Размер строки превышает допустимый максимум в 8060 байт  [new]
PulsarOnyx
Member

Откуда:
Сообщений: 8
invm,

Та же ошибка, сейчас пробую возможно сами название столбцов длинные.
20 окт 16, 16:52    [19805520]     Ответить | Цитировать Сообщить модератору
 Re: Размер строки превышает допустимый максимум в 8060 байт  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
PulsarOnyx
invm,

Та же ошибка, сейчас пробую возможно сами название столбцов длинные.

выглядит как ограничение на
Bytes per GROUP BY, ORDER BY 8060
20 окт 16, 17:13    [19805643]     Ответить | Цитировать Сообщить модератору
 Re: Размер строки превышает допустимый максимум в 8060 байт  [new]
invm
Member

Откуда: Москва
Сообщений: 9406
PulsarOnyx
invm,

Та же ошибка, сейчас пробую возможно сами название столбцов длинные.
Тьфу, торможу. У вас же план не строится...

Проверьте по какому выражению группируется в pivot'е.
Воспроизвести ошибку можно так:
+
use tempdb;
go

create table dbo.t (id int primary key, a int, b int, c int);
update statistics dbo.t with rowcount = 100000000;
go

set statistics xml on;
go

-- 1
select
 a, max(cast(b as char(800))), max(cast(c as char(800)))
from
 dbo.t
group by
 a
option
 (maxdop 1, order group);
go

-- 2
select
 cast(a as char(80)), max(cast(b as char(800))), max(cast(c as char(800)))
from
 dbo.t
group by
 cast(a as char(80))
option
 (maxdop 1, order group);
go

-- 3
-- А вот тут, возможно, уже будет ошибка 8618
select
 cast(a as char(8000)), max(cast(b as char(800))), max(cast(c as char(800)))
from
 dbo.t
group by
 cast(a as char(8000))
option
 (maxdop 1, order group);
go

set statistics xml off;
go

drop table dbo.t;
go
Обратите внимание, когда вычисляются значения столбцов - в 1 после сортировки, в 2 - до.
20 окт 16, 18:48    [19805922]     Ответить | Цитировать Сообщить модератору
 Re: Размер строки превышает допустимый максимум в 8060 байт  [new]
PulsarOnyx
Member

Откуда:
Сообщений: 8
invm,

Понятно, сегодня буду работать, о результатах отпишусь.
21 окт 16, 09:47    [19807246]     Ответить | Цитировать Сообщить модератору
 Re: Размер строки превышает допустимый максимум в 8060 байт  [new]
PulsarOnyx
Member

Откуда:
Сообщений: 8
PulsarOnyx,

Получилось по фиксит, просмотрев еще раз запрос, обнаружил, что при динамической генерации запроса, измерения такие как квартал и месяц просто умножались, из-за чего появлялось много лишних записей в запросе. Изменив генерацию отчета, уменьшился сам запрос. И вуаля , запрос работает, но понят, что ограничение в 1024 столбца в таблице мне не обойти , это разве, что как то быть запрос и вязать . Всем спасибо за помощь.
21 окт 16, 12:18    [19808443]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить