comando parcial ATUALIZAÇÃO
-
03-07-2019 - |
Pergunta
eu quero executar comando UPDATE sobre um grupo de registros, mas ele falhar, porque alguns registros após a atualização iria violar uma restrição de tabela. É possível atualizar apenas os registros adequados de alguma forma?
Solução
Comportamento do Update como tudo ou nada é por design
Você pode adicionar Onde cláusulas para o seu comando Update para verificar todas as restrições, mas isso resulta em duplicação de código, não é uma coisa boa
Que tal fazer a atualização uma linha em um tempo usando um loop Cursor ou CLR?
Se esta é parte de uma aplicação de múltiplas camadas, então este é o lugar onde seus objetos de negócios precisa saber sobre suas limitações de SQL através de dados de meta ou interrogatório esquema para que a validação de dados pode ser feito antes de atingir o banco de dados
O quadro CSLA tem algumas guloseimas para este
Outras dicas
A instrução de atualização é em si atômica, ele quer tudo dar certo ou todos falham. Você precisa modificar a SQL para atualizar somente as linhas onde a restrição não será violada.
Você precisa adicionar as restrições à cláusula WHERE.
Ou isso ou executar a atualização separadamente para cada linha, mas isso não parece ser uma boa idéia.
Para adicionar a algumas das respostas já publicadas: você pode precisar usar uma subconsulta na cláusula WHERE. Como (em pseudo-código)
update mytable
set myfield = myval
where not exists (select from some table that would tell you if a constraint is violated for this row)
Se você código postal, eu poderia ser capaz de ajudá-lo mais.