проблема, обновляющая стол в петле на основе набора результатов от того же самого стола

Рассмотрите следующий (Semi-psuedocode):

CREATE TABLE foobar (
    id INT NOT NULL
    message VARCHAR(40) NOT NULL
)

INSERT INTO foobar (1, "hello");
INSERT INTO foobar (2, "world");


my $resultset = "SELECT * FROM foobar";
while(!$resultset->EOF) {
    "UPDATE foobar SET message='blah' WHERE id = ".$resultset->id;
    $resultset->moveNext;
}

В сущности я пытаюсь выбрать все отчеты из стола, и затем петлю по каждому обновлению нескольких областей. Однако, когда я делаю это, я получаю следующую ошибку:

[Microsoft] [Клиент уроженца SQL Server 10.0] [SQL Server] спусковой механизм возвратил набор результатов и/или работал с ВЫДЕЛЕННЫМ NOCOUNT, в то время как другой выдающийся набор результатов был активен. (SQL-42000) в continuous.pl линии 493.

Проблема состоит в том, что я не управляю никакими спусковыми механизмами. Я думал, что, возможно, это было то, потому что я пытаюсь обновить активный набор результатов, таким образом, я добавил посреднический шаг отбора всех данных в стол временного секретаря и затем повторения по столу временного секретаря, чтобы обновить оригинальный, но я все еще получаю ту же самую ошибку.

Какие-либо идеи, что продолжается?

1
nl ja de
Хорошо кроме более аккуратной проблемы, с какой стати вы делаете это в петле? Почему ни одно обновление?
добавлено автор Aaron Bertrand, источник
Как те части SQL становятся запущенными? На большинстве языков у вас было бы, по крайней мере, объект связи или объект команды включенными. I' d ожидают то сообщение об ошибке если you' ре, снова использующее тот же самый объект связи.
добавлено автор Damien_The_Unbeliever, источник
Кроме того, я знаю, что вы сказали, что это - псевдокод - но если весь вызываемый делает, перекручивание через один набор результатов, чтобы выйти ОБНОВЛЕНИЕ s, I' d рекомендуют заменить его полностью, SQL основывал решение без петель.
добавлено автор Damien_The_Unbeliever, источник
Кроме того, я знаю, что вы сказали, что это - псевдокод - но если весь вызываемый делает, перекручивание через один набор результатов, чтобы выйти ОБНОВЛЕНИЕ s, I' d рекомендуют заменить его полностью, SQL основывал решение без петель.
добавлено автор Damien_The_Unbeliever, источник
Так, вы проверяли, есть ли действительно такой спусковой механизм на foobar ?
добавлено автор Andriy M, источник
Так, вы проверяли, есть ли действительно такой спусковой механизм на foobar ?
добавлено автор Andriy M, источник
И между прочим, если ваше заявление обновления действительно устанавливает колонки во всех рядах к фиксированным значениям, вы могли бы избежать петли и выполнить, просто ОБНОВЛЕНИЕ foobar, УСТАНАВЛИВАЕТ column1=value1, column2=value2... (без любого оператора Where).
добавлено автор Andriy M, источник
И между прочим, если ваше заявление обновления действительно устанавливает колонки во всех рядах к фиксированным значениям, вы могли бы избежать петли и выполнить, просто ОБНОВЛЕНИЕ foobar, УСТАНАВЛИВАЕТ column1=value1, column2=value2... (без любого оператора Where).
добавлено автор Andriy M, источник

2 ответы

Хорошо я чувствую себя глупым. У меня ДЕЙСТВИТЕЛЬНО был спусковой механизм на столе, и у него ДЕЙСТВИТЕЛЬНО был набор nocount к на, НО, была единственная линия кода прямо прежде, чем установить nocount на в спусковом механизме, который только работает при редких обстоятельствах, и это именно так, оказалось, бежало на этот раз. Фиксация спускового механизма устранила мою проблему. У меня должно быть больше кофе.

Причина, почему я делаю это в петле вместо единственного заявления обновления, состоит в том, потому что реальный вопрос в широком масштабе сложный (отформатированный приятно, это - приблизительно 100 линий), и обновляемые данные полагаются частично на данные в ряду, обновляемом, и другие столы в базе данных. Предоставленный, я мог, вероятно, использовать умный набор соединений, но это - одна из тех ситуаций, где она так сложная, что я предпочитаю оптимизировать позже.

1
добавлено

Хорошо я чувствую себя глупым. У меня ДЕЙСТВИТЕЛЬНО был спусковой механизм на столе, и у него ДЕЙСТВИТЕЛЬНО был набор nocount к на, НО, была единственная линия кода прямо прежде, чем установить nocount на в спусковом механизме, который только работает при редких обстоятельствах, и это именно так, оказалось, бежало на этот раз. Фиксация спускового механизма устранила мою проблему. У меня должно быть больше кофе.

Причина, почему я делаю это в петле вместо единственного заявления обновления, состоит в том, потому что реальный вопрос в широком масштабе сложный (отформатированный приятно, это - приблизительно 100 линий), и обновляемые данные полагаются частично на данные в ряду, обновляемом, и другие столы в базе данных. Предоставленный, я мог, вероятно, использовать умный набор соединений, но это - одна из тех ситуаций, где она так сложная, что я предпочитаю оптимизировать позже.

1
добавлено
SqlCom.ru - Стиль жизни SQL
SqlCom.ru - Стиль жизни SQL
908 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только MS SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz). Предложения в @sql_ninja

SQL_Ninja
SQL_Ninja
340 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz)