Имя: Пароль:
1C
 
SQL скрипт из 1С. Проблема с циклом.
0 SeiOkami
 
15.03.22
09:19
Всем привет!

Вот такой запрос: https://ibb.co/fNXH8JF
Внутренности цикла не важны. Главное, что если его выполнить через Management Studio, то всё работает корректно. Это видно и по числу удаленных записей в БД и по профайлеру.
Но если выполнять из 1С (через ADODB.Connection), то цикл выполняется максимум 91 раз. Указываешь 1000, а выполняется 91. При этом ничего не падает.
Таймаут стоит 0. Пробовал ставить кучу девяток. Но бессмысленно - скрипт всё равно выполняется за пару секунд.
1 SeiOkami
 
15.03.22
09:21
Вот так происходит вызов выполнения скрипта в 1С

    Command = Новый COMОбъект("ADODB.Command");
    Command.ActiveConnection = Connection;
    Command.CommandTimeout = 0;
    Command.CommandText = CommandText;
    Command.CommandType = 1;
    РезультатВыполнения = Command.Execute();
2 trad
 
15.03.22
09:34
попробуй в начале запроса:
set nocount on
3 SeiOkami
 
15.03.22
09:37
(2), УРА!
Мучался с этим долго. Спасибо!

В чём хитрость магии? Выходит, что 1С в какой-то момент ловила в качестве результата промежуточное сообщение и считала, что скрипт больше не имеет смысла выполнять?
4 trad
 
15.03.22
09:46
Execute() накапливает в буфере все результаты, и выборки и роукаунты (а роукаунтов у тебя много).
Количество результатов в буфере ADODB.Command ограничено.
Вот Command.Execute() и передает управление в твой код, когда этот буфер закончился, хотя запрос еще не выполнен.
И твой код принудительно прекращает выполнение просто разрушая Command.

Если роукаунты в РезультатВыполнения все же нужны, то надо смотреть на состояние Command и дожидаться окончательного выполнения запроса.
5 SeiOkami
 
15.03.22
09:51
(4), спасибо за объяснение!
В данном случае результаты вообще не нужны. Главное дождаться выполнения скрипта.