Вопрос

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

Это было полезно?

Решение

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

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

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

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

В платформе CSLA есть несколько полезных вещей для этого

Другие советы

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

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

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

Чтобы добавить ответы на некоторые из уже опубликованных ответов: вам может понадобиться использовать подзапрос в предложении 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)

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top