Domanda

Voglio eseguire il comando UPDATE su un gruppo di record, ma fallisce, perché alcuni record dopo l'aggiornamento violerebbero un vincolo di tabella. È possibile aggiornare in qualche modo solo i record adatti?

È stato utile?

Soluzione

Comportamento dell'aggiornamento in quanto tutto o niente è in base alla progettazione

È possibile aggiungere clausole Where al comando Update per verificare tutti i vincoli, ma ciò comporta la duplicazione del codice, non una buona cosa

Che ne dici di fare l'aggiornamento una riga alla volta usando un cursore Cursor o CLR?

Se fa parte di un'applicazione multistrato, è qui che i tuoi oggetti aziendali devono conoscere i tuoi vincoli SQL tramite metadati o interrogazioni dello schema in modo che la convalida dei dati possa essere eseguita prima che colpisca il database

Il CSLA framework ha alcune chicche per questo

Altri suggerimenti

L'istruzione update è di per sé atomica, avrà successo o fallirà. È necessario modificare l'SQL per aggiornare solo le righe in cui il vincolo non verrà violato.

Devi aggiungere i vincoli alla clausola WHERE.

O quello o esegui l'aggiornamento separatamente per ogni riga, ma questa non sembra affatto una buona idea.

Per aggiungere ad alcune delle risposte già pubblicate: potrebbe essere necessario utilizzare una sottoquery nella clausola where. Mi piace (nel codice psuedo)

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 pubblichi un codice, potrei essere in grado di aiutarti di più.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top