Disons que j'ai une relation directe maître-détail entre deux tables (OrderHeaders
et OrderDetails
par exemple). Si je souhaite que les enregistrements de détail soient supprimés en même temps que la suppression d'une fiche, je peux définir l'action de suppression sur la relation entre les deux en cascade.SQL Server: comment empêcher qu'un enregistrement soit supprimé si l'une de ses colonnes est égale à une certaine valeur
C'est très bien, les tables sont essentiellement indépendantes de toute autre chose dans la base de données. Cependant, si nous devions transformer une commande en facture à un moment donné, il est clair que l'on ne voudrait pas supprimer une commande ou ses détails connexes.
Dans mon équivalent du tableau OrderHeaders
j'ai ajouté une simple colonne booléenne (Posted
) qui est définie sur true si une commande a été convertie en une facture.
Quelle est la manière correcte en SQL d'imposer une règle sur la table OrderHeaders
pour empêcher la suppression d'un enregistrement si la valeur Posted
est égale à true?
S'il y a en fait de meilleures approches à cette situation particulière alors je suis parfaitement ouvert aux suggestions, il est toujours bon d'apprendre quelque chose de nouveau.
Un grand merci
Dom
Si je comprends bien, vous voulez supprimer à partir de Détails quand il y a suppression dans les OrderHeaders, mais cela devrait être conditionnel basé sur l'indicateur Posté qui est dans une autre table? – Sujith
Y a-t-il d'autres éléments stockés lors de la conversion d'une commande en facture? Si oui, cela pourrait-il ne pas avoir un FK à OrderHeaders au lieu de la colonne Posté, et avoir ce FK non cascade? –
@Sujith Le champ Posté se trouve dans la table OrderHeaders elle-même. –