Команда частичного обновления - PullRequest
2 голосов
/ 05 марта 2009

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

Ответы [ 4 ]

5 голосов
/ 05 марта 2009

Поведение обновления, так как все или ничего не предусмотрено

Вы можете добавить предложения Where в свою команду Update, чтобы проверить все ограничения, но это приводит к дублированию кода, что не очень хорошо

Как насчет обновления одной строки за раз с использованием цикла Cursor или CLR?

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

У CSLA framework есть некоторые плюсы для этого

5 голосов
/ 05 марта 2009

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

3 голосов
/ 05 марта 2009

Необходимо добавить ограничения в предложение WHERE.

Либо так, либо запустите обновление отдельно для каждой строки, но это совсем не кажется хорошей идеей.

0 голосов
/ 05 марта 2009

Чтобы добавить ответы на некоторые из уже опубликованных ответов: вам может понадобиться использовать подзапрос в предложении where. Как (в псевдо-коде)

update mytable
set myfield = myval
where not exists (select from some table that would tell you if a constraint is violated for this row)

Если вы отправите код, я мог бы помочь вам больше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...