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

Откуда: Набережные Челны
Сообщений: 77
MSSQL 2005 EE я динамически формирую в программе b.parentId in (1,... N) где N - переменное количество значений я бы хотел узнать max-значение значений в in, а так же сколько килобайт может весить sql-запрос, вот помню по InterBase c которой приходилось работь количество N = 256 в in () и сам sql не должен был превышать ~ 2 килобайт а у mssql 2005 какие ограничения не скажите а ???? :) :) :)
13 июл 09, 11:02    [7407238]     Ответить | Цитировать Сообщить модератору
 Re: max-значение значений в in  [new]
tusha
Member

Откуда:
Сообщений: 122
а использовать таблицу вместо того чтоб делать 1000 перечислений? каждый раз с добавлением нового параметра в in (.....) запрос будет тормозить
13 июл 09, 11:07    [7407261]     Ответить | Цитировать Сообщить модератору
 Re: max-значение значений в in  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
По идее где-то гектара два...
НО! Пользоваться конструкцией IN() в условиях отбора лучше не надо... Сиквел будет стараться привести условие (как правило) к эквиваленту с применением OR, а это при достаточно большом списке хоть кому башню снести может.
Заполняйте лучше своим списком табличную переменную или предварительно созданную временную таблицу, а в условии примените EXISTS.

Сообщение было отредактировано: 13 июл 09, 11:11
13 июл 09, 11:11    [7407281]     Ответить | Цитировать Сообщить модератору
 Re: max-значение значений в in  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
рекомендую автору создать хранимку
и дергать ее с клиента вместо динамического формирования запроса на клиенте

в качестве параметра можно передавать в хранимку список parentId
оформленный, например, в виде xml
а внутри хнанимки делать их этого таблицу(или табличную переменную, или derived table)
и джойниться на нее

подробнее о такого рода задачах см. Массивы и Списки в SQL Server
13 июл 09, 11:13    [7407289]     Ответить | Цитировать Сообщить модератору
 Re: max-значение значений в in  [new]
lvit
Member

Откуда: Набережные Челны
Сообщений: 77
по некой таблице мы организуем дерево, пусть есть поля id int ,parentId int, name string table1 связь идет по полям (parent-поле) id -> parentId (child-поле)
дерево строится таким образом покажу 1 ветку:
1,0, 'Ген дирекция',
2,1, 'Апарат генирального директрора'
.....
5,2,'Бюро производства'
6,2,'Руководство'
7,6,'Аппарат при руководстве'
.....
-Ген дирекция
--Апарат генирального директрора
---Бюро производства ---Руководство
----Аппарат при руководстве

выбрал допустим пользователь ---Руководство мне нужно select FIO, TABELNIY from table2 where .... and parent in ( кто входит в ветку руководство, Аппарат при руководстве, и т.д. по дереву вниз и в разные стороны )
связь table1.parentId->table2.parent
13 июл 09, 11:53    [7407492]     Ответить | Цитировать Сообщить модератору
 Re: max-значение значений в in  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Я что-то не могу понять, к чему Вы это написали...
Что из перечисленного мешает Вам создать хранимку и дергать ее с клиента,
передавая список родительских ИД в качестве параметра?
13 июл 09, 11:56    [7407511]     Ответить | Цитировать Сообщить модератору
 Re: max-значение значений в in  [new]
lvit
Member

Откуда: Набережные Челны
Сообщений: 77
tpg,

я это знаю вот в том и вопрос когда башню сносит после какого N :) :) :)
13 июл 09, 12:03    [7407557]     Ответить | Цитировать Сообщить модератору
 Re: max-значение значений в in  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
lvit
tpg,

я это знаю вот в том и вопрос когда башню сносит после какого N :) :) :)
Были преценденты - видел, как аднаэсина генерякала в IN порядка сотен тысяч значений - сиквел валился с ошибкой нехватки памяти для построения плана запроса.
13 июл 09, 12:07    [7407574]     Ответить | Цитировать Сообщить модератору
 Re: max-значение значений в in  [new]
lvit
Member

Откуда: Набережные Челны
Сообщений: 77
Паганель,

не злись :) :) :) не успел вам ответить а вы уже 2 пост написали :) :) :) не что не мешает просто прогу уже написал лень переписывать :) счас начинает казаться что надо сделать временную таблицу + procedure (вызывать ее по каждому узлу(node) дерева ) после того как кончатся узлы тупо в поге пробежаться select FIO, TABELNIY from table2 where ... parent=TEMP_table.parentID
13 июл 09, 12:14    [7407617]     Ответить | Цитировать Сообщить модератору
 Re: max-значение значений в in  [new]
lvit
Member

Откуда: Набережные Челны
Сообщений: 77
tpg,

меня то же 1С не перестает удивлять :) :) :)
13 июл 09, 12:19    [7407649]     Ответить | Цитировать Сообщить модератору
 Re: max-значение значений в in  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
lvit
прогу уже написал лень переписывать :)
если текст запроса формируется динамически, то есть вероятность,
что при каком-либо редкостном стечении обстоятельств может возникнуть исключение типа
"ой, неверный синтаксис SQL-запроса"

хорошо если это будет выявлено при тестировании, но по закону бутерброда ждите,
что выявлено не будет, и выстрелит у заказчика

а потом, чтобы найти причины сбоя (или хотя бы способ как его повторить)
Вам, надеюсь, не лень будет помучиться денек-другой
13 июл 09, 12:20    [7407658]     Ответить | Цитировать Сообщить модератору
 Re: max-значение значений в in  [new]
lvit
Member

Откуда: Набережные Челны
Сообщений: 77
Паганель
lvit
прогу уже написал лень переписывать :)
если текст запроса формируется динамически, то есть вероятность,
что при каком-либо редкостном стечении обстоятельств может возникнуть исключение типа
"ой, неверный синтаксис SQL-запроса"

хорошо если это будет выявлено при тестировании, но по закону бутерброда ждите,
что выявлено не будет, и выстрелит у заказчика

а потом, чтобы найти причины сбоя (или хотя бы способ как его повторить)
Вам, надеюсь, не лень будет помучиться денек-другой
учту на будущее, спасиб All
13 июл 09, 13:43    [7408299]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить