powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Что лучше, передать большой массив в процедуру или все-же таблицу
12 сообщений из 12, страница 1 из 1
Что лучше, передать большой массив в процедуру или все-же таблицу
    #32001251
skif
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть проблема - передать большой массив в процедуру, так как вызов процедур для каждого элемента массива в цикле продолжается минут 15
.
Вот видел я описание параметра как Array, но никак не удается попробовать. и потом как его обработать?
...
Рейтинг: 0 / 0
Что лучше, передать большой массив в процедуру или все-же таблицу
    #32001254
Kenat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А конкретней можно по вопросу непонятна бизнес логика, массив какой в процедуру какую паскасль или SQL,
...
Рейтинг: 0 / 0
Что лучше, передать большой массив в процедуру или все-же таблицу
    #32001265
Fompro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ARRAY, как зарезервированное слово я видел, но как тип данных ..?
...
Рейтинг: 0 / 0
Что лучше, передать большой массив в процедуру или все-же таблицу
    #32001281
skif
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да вот что конкретно. Есть мулька типа сервера безопасности. ты выделяешь список объектов в эксплорере, а потом указанному пользователю даешь Grant.
Существует процедурка пока что, которая берет в качестве параметра один SID объекта и Item_ID пользователя и увязывает их.
И вот я получаю список SID объектов, которые выделил админ - а их там тысяч 20. И в цикле запускаю процедуру GRANT, которая на каждый SID выдает Grant пользователю. Притом есть еще одна беда. Так как все написано на Бэйсике с реализацией DCOM, то клиент посылает на сервер массив SID, после чего создается ощущение, что он висит... ясно он висит, пока удаленный сервер не пропишет все циклы. А раз это длится минут 20 (так как я понял, что SQL server 7.0 делает порядка 2000 транзакций в минуту), то юзер может не выдержать. Если вызов цикла перенести на клиента, то можно показать Progress Bar, и тогда время выполнения увеличивается в 2 раза, то есть до 40 минут.
Нужно весь массив закинуть в процедуру SQL-Server, чтобы он ее там обработал. Я думаю, что секунд 20 ему хватит. Но как это сделать - не знаю. Есть еще идея все закачать в отсоединенный рекордсет и передать его в процедуру, но как и что с ним потом делать?

Буду благодарен за любой совет.
...
Рейтинг: 0 / 0
Что лучше, передать большой массив в процедуру или все-же таблицу
    #32001283
Fompro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Стояла немного другая задача: требовалось из PB перенести на сервер получение списка характеристик счетов, при том, что пользователь сам выбирал массив их идентификаторов. Ничего лучше, чем сформировать строку (Comma separated) и передать её в пр-ру как text, на ум не пришло. Далее шёл простой EXECUTE("...")
...
Рейтинг: 0 / 0
Что лучше, передать большой массив в процедуру или все-же таблицу
    #32001297
VadimB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Передать большой объем данных со сложной стуктурой можно с использованием XML.
Например спмсок пар SID и Item_ID можно ппредставить в виде XML текста
<ROOT>
<R SID="1" Item_ID="10"> </R>
<R SID="2" Item_ID="20"> </R>
<R SID="3" Item_ID="30"> </R>
<R SID="4" Item_ID="40"> </R>
</ROOT>'
и передать его в процедуру.
В процедуре из этого текста можно получить таблицу пар SID и Item_ID
следующим образом (примеры есть в BO):

DECLARE @idoc int
DECLARE @doc varchar(1000) -- исходные данные
SET @doc ='
<ROOT>
<R SID="1" Item_ID="10"> </R>
<R SID="2" Item_ID="20"> </R>
<R SID="3" Item_ID="30"> </R>
<R SID="4" Item_ID="40"> </R>
</ROOT>'

EXEC sp_xml_preparedocument @idoc OUTPUT, @doc

SELECT *
FROM OPENXML (@idoc, '/ROOT/R',2)
WITH (SID int '@SID',
Item_ID int '@Item_ID')

результат:
SID Item_ID
----------- -----------
1 10
2 20
3 30
4 40
...
Рейтинг: 0 / 0
Что лучше, передать большой массив в процедуру или все-же таблицу
    #32001299
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще можно завести таблицу спецально для передачи таких данных. Одна из колонок будет какой-то уникальный идентификатор, другая колонка с данными(например SID объекта).
В одном месте надо будет вставить записи в таблицу с неким идентификатором, а затем вызвать процедуру на SQL(её естественно надо написать) и как параметр передать это идентификатор.
...
Рейтинг: 0 / 0
Что лучше, передать большой массив в процедуру или все-же таблицу
    #32001308
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для варианта SergSuper лучше использовать временную таблицу.
...
Рейтинг: 0 / 0
Что лучше, передать большой массив в процедуру или все-же таблицу
    #32001317
AnKa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Решил, вот, проверить пример VadimB. Дык, что-то ничего не получается (. Ругается :
Could not find stored procedure 'sp_xml_preparedocument'.
... а также непонятки с OPENXML (@idoc, '/ROOT/R',2)
Я чего-то не то делаю?
...
Рейтинг: 0 / 0
Что лучше, передать большой массив в процедуру или все-же таблицу
    #32001318
VadimB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Поддержка XML есть только в MS SQL2000.
Тексты примеров можно взять в BO из раздела sp_xml_preparedocument.
...
Рейтинг: 0 / 0
Что лучше, передать большой массив в процедуру или все-же таблицу
    #32001319
Фотография Дед Маздай
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужен SQL Server 8.0 (a.k.a. 2000). Кстати, вопрос: можно ли Open XML Rowset Provider'у дать на вход имя файла? Или единственный выход - формировать XML как строку внутри батча? Тогда непонятно, как быть с XML-документами, чей размер превышает 8К.
...
Рейтинг: 0 / 0
Что лучше, передать большой массив в процедуру или все-же таблицу
    #32001328
VadimB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ксли размер данных в формате XML больше 8K, то для этого в процедуре sp_xml_preparedocument второй параметр может иметь тип text или ntext. А передать серверу более 8К это проблема клиента
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Что лучше, передать большой массив в процедуру или все-же таблицу
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]