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

Откуда:
Сообщений: 42
При выполнении запроса SELECT в котором много функций выдается такая ошибка:
"Внутренняя ошибка: был достигнут предел размера стека на сервере. Проверьте возможное наличие глубокой вложенности в запросе и постарайтесь его упростить." на 2005 и 2008 серверах работает без проблем. Подсчитал количество функций с которыми не выдает ошибку - 163, если больше - ошибка.
Запрос типа :
SELECT LTRIM(STR(REC_NO)),
LTRIM(STR(BOOK)),
LTRIM(STR(NAKT)),
LTRIM(STR(ADOP)),
ISNULL(BUKA,''),
CONVERT(VARCHAR(10),DAKT,120),
ISNULL(FAMB,''),
ISNULL(NAMB,''),
ISNULL(OTB,''),
LTRIM(STR(POL)), и т.д.

на сайте MS есть в суппорте почти такой же вопрос с этой ошибкой, ответ MS еще в январе - типа исправим, но ничего не сделано.
И как быть?
30 окт 12, 12:26    [13395759]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка SQL 2012: был достигнут предел размера стека на сервере.  [new]
Glory
Member

Откуда:
Сообщений: 104751
vv_fran
И как быть?

- Написать в поддержку ?
- Переписать запрос ?
- Откзаться от MSSQL ?
- ...
30 окт 12, 12:40    [13395864]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка SQL 2012: был достигнут предел размера стека на сервере.  [new]
vv_fran
Member

Откуда:
Сообщений: 42
Glory, в MS - написал :(
переписать запрос очень сложно, т.к. там на самом деле большая функция, пример - упрощенный кусок, отказаться - нереально...
30 окт 12, 12:55    [13396014]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка SQL 2012: был достигнут предел размера стека на сервере.  [new]
Glory
Member

Откуда:
Сообщений: 104751
vv_fran
переписать запрос очень сложно, т.к. там на самом деле большая функция

163 функции - это паранойя. Или НЕжелание форматировать результаты запроса на стороне клиента
В чем великий смысл, например LTRIM(STR(REC_NO)) ?
30 окт 12, 12:59    [13396050]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка SQL 2012: был достигнут предел размера стека на сервере.  [new]
vv_fran
Member

Откуда:
Сообщений: 42
Glory,
- на американском форуме: ты задаешь вопрос и получаешь ответ.
- на русском форуме: ты задаешь вопрос и тебе долго и нудно объясняют какой ты му**к.....
30 окт 12, 13:06    [13396111]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка SQL 2012: был достигнут предел размера стека на сервере.  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
vv_fran
Glory,
- на американском форуме: ты задаешь вопрос и получаешь ответ.
- на русском форуме: ты задаешь вопрос и тебе долго и нудно объясняют какой ты му**к.....

А что вы хотели, если вы уже пришли с ответом?

vv_fran
ответ MS еще в январе - типа исправим, но ничего не сделано.


Чего вам еще надо?
30 окт 12, 13:07    [13396126]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка SQL 2012: был достигнут предел размера стека на сервере.  [new]
Glory
Member

Откуда:
Сообщений: 104751
vv_fran
- на американском форуме: ты задаешь вопрос и получаешь ответ.
- на русском форуме: ты задаешь вопрос и тебе долго и нудно объясняют какой ты му**к.....

И какой же ответ вы получили на американском форуме ?
Кто-то назвал волшебную команду, чтобы работало быстро и правильно ?
30 окт 12, 13:09    [13396141]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка SQL 2012: был достигнут предел размера стека на сервере.  [new]
vv_fran
Member

Откуда:
Сообщений: 42
Minamoto, да может у кого есть более свежая инфа по этому поводу....или кто то уже ведет переписку с MS на эту тему....
30 окт 12, 13:10    [13396158]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка SQL 2012: был достигнут предел размера стека на сервере.  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
vv_fran
Minamoto, да может у кого есть более свежая инфа по этому поводу....или кто то уже ведет переписку с MS на эту тему....
У кого может быть более свежая инфа, чем у Майкрософта? :) Вы же сами с ними переписываетесь.

Здесь могут посоветовать, как переписать запрос, чтобы обойти ограничение. Собственно, уже посоветовали.
А решить проблемы Microsoft может только Microsoft.
30 окт 12, 13:12    [13396178]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка SQL 2012: был достигнут предел размера стека на сервере.  [new]
vv_fran
Member

Откуда:
Сообщений: 42
Minamoto, Ну они и ответили:

I think you have two options

1) Wait till SP1 (not sure that it will be resolved)

2) Simplify the query (Переписать запрос и постараться удалить/уменьшить использование вложенных функций.)

( специально для Glory )
30 окт 12, 13:17    [13396224]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка SQL 2012: был достигнут предел размера стека на сервере.  [new]
Glory
Member

Откуда:
Сообщений: 104751
vv_fran
( специально для Glory )

специально для слепых 13395864
30 окт 12, 13:22    [13396282]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка SQL 2012: был достигнут предел размера стека на сервере.  [new]
tetxx
Member

Откуда:
Сообщений: 297
Если манимуляции с полями однотипные (один и тот же isnull над десятком полей), то можно сделать такой финт:
declare @t as table (id int, f1 varchar(10),f2 varchar(10),f3 varchar(10))

insert into @t(id,f1,f2,f3)
values 
(1,' f11 ',' f12 ',' f13 '),
(2,' f21 ',' f22 ',' f23 '),
(3,' f31 ',' f32 ',' f33 '),
(4,' f41 ',' f42 ',' f43 ')

select *
from (
  select id,fname,
    /*тут группируем операции над разными полями вместе*/
    case 
    when fname in ('f1','f2') then replace(unpvt.val,' ','+')
    when fname in ('f3')    then replace(unpvt.val,' ','-')
    end as val
  from @t 
  unpivot(val for fname in ([f1],[f2],[f3]))unpvt
) t
pivot(max(val) for fname in ([f1],[f2],[f3]))pvt
30 окт 12, 14:14    [13396829]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка SQL 2012: был достигнут предел размера стека на сервере.  [new]
vv_fran
Member

Откуда:
Сообщений: 42
tetxx, да нет, я же писал, что SELECT - просто пример, всё намного сложнее.
30 окт 12, 14:32    [13396975]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка SQL 2012: был достигнут предел размера стека на сервере.  [new]
tetxx
Member

Откуда:
Сообщений: 297
Намного сложнее? Ну это всё меняет!
with t as (
  /*намного сложнее*/
)
select ... from pivot

Ведь это запрос для отчета, верно? Значит всё в любом случае заканчивается плоской табличной, которую форматируем на стороне сервера для вывода на клиенте. И тогда сам процесс форматирования можно как раз вынести на самый последний этап сборки запроса, и там уже группировать поля по однотипным операциям.

Либо приводите полный запрос, если там вообще всё сложно.
30 окт 12, 15:01    [13397193]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка SQL 2012: был достигнут предел размера стека на сервере.  [new]
vv_fran
Member

Откуда:
Сообщений: 42
tetxx,
это функция, которая собирает по нескольким таблицам(более 20 таблиц, больше половины - справочники) инфу и выводит её в текстовую строку вида csv и сохраняет в файл, для передачи в другое приложение. Полей получается более 200. Упростить можно только если всё это делать на клиенте, но зачем тогда сервер? Да и переделывать систему, которая работает с 2000 года в лом....
31 окт 12, 16:41    [13403632]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка SQL 2012: был достигнут предел размера стека на сервере.  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
может быть в несколько запросов с использованием промежуточных таблиц для хранения результатов?
31 окт 12, 16:48    [13403694]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка SQL 2012: был достигнут предел размера стека на сервере.  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
vv_fran
tetxx,
это функция, которая собирает по нескольким таблицам(более 20 таблиц, больше половины - справочники) инфу и выводит её в текстовую строку вида csv и сохраняет в файл, для передачи в другое приложение. Полей получается более 200. Упростить можно только если всё это делать на клиенте, но зачем тогда сервер? Да и переделывать систему, которая работает с 2000 года в лом....
Глупый вопрос - а зачем вы на 2012 сервер переходили, если вам в лом? При обновлении версии всегда есть риски того, что часть системы придется переписать.
31 окт 12, 17:03    [13403815]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка SQL 2012: был достигнут предел размера стека на сервере.  [new]
vv_fran
Member

Откуда:
Сообщений: 42
Minamoto, программа работает в 6 регионах... вот одни клиенты и установили новый сервер, а потом мне пишут, что не работает моя программа, вот я и выяснял почему не работает. А БД, если была хоть раз открыта в старшем сервере на предыдущую версию переходить не желает, и переустановка на 2008 сервер не поможет. Вот я совместно с ихними программистами и пытаемся решить эту проблему.
31 окт 12, 17:11    [13403866]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка SQL 2012: был достигнут предел размера стека на сервере.  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
vv_fran
Minamoto, программа работает в 6 регионах... вот одни клиенты и установили новый сервер, а потом мне пишут, что не работает моя программа, вот я и выяснял почему не работает. А БД, если была хоть раз открыта в старшем сервере на предыдущую версию переходить не желает, и переустановка на 2008 сервер не поможет. Вот я совместно с ихними программистами и пытаемся решить эту проблему.
А если они Linux установят, вы тоже будете туда скуль городить? O_o
31 окт 12, 17:12    [13403873]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка SQL 2012: был достигнут предел размера стека на сервере.  [new]
Glory
Member

Откуда:
Сообщений: 104751
vv_fran
Полей получается более 200. Упростить можно только если всё это делать на клиенте, но зачем тогда сервер? Да и переделывать систему, которая работает с 2000 года в лом....

Нормальные разработчики для экспорта использовали DTS, а сейчас используют SSIS
31 окт 12, 17:15    [13403893]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка SQL 2012: был достигнут предел размера стека на сервере.  [new]
vv_fran
Member

Откуда:
Сообщений: 42
специально для Glory повторяю:
- на американском форуме: ты задаешь вопрос и получаешь ответ.
- на русском форуме: ты задаешь вопрос и тебе долго и нудно объясняют какой ты му**к.....
31 окт 12, 17:21    [13403936]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка SQL 2012: был достигнут предел размера стека на сервере.  [new]
Glory
Member

Откуда:
Сообщений: 104751
vv_fran
специально для Glory повторяю:

Ну так идите поплачьтесь туда
Вам еще раз повторят
) Wait till SP1 (not sure that it will be resolved)
2) Simplify the query (Переписать запрос и постараться удалить/уменьшить использование вложенных функций.)
31 окт 12, 17:23    [13403948]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка SQL 2012: был достигнут предел размера стека на сервере.  [new]
vv_fran
Member

Откуда:
Сообщений: 42
Glory, не говори что мне делать, и я не скажу куда тебе пойти....
31 окт 12, 17:26    [13403971]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка SQL 2012: был достигнут предел размера стека на сервере.  [new]
Glory
Member

Откуда:
Сообщений: 104751
vv_fran
Glory, не говори что мне делать, и я не скажу куда тебе пойти....

Не мешайте мне высказывать свое мнение и я тоже не буду говорить, куда вам идти
31 окт 12, 17:27    [13403978]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка SQL 2012: был достигнут предел размера стека на сервере.  [new]
Гавриленко Сергей Алексеевич
Member

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

Вам уже ваша проблема не интересна? Вы хотите полечить форум?
31 окт 12, 17:28    [13403984]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить