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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top