Si vous voulez éviter accidentelle supprime alors vous pourriez avoir une table factice qui déclare une clé étrangère dans votre table avec ON DELETE NO ACTION
, et ajouter une ligne dans avec la clé étrangère correspondant à votre « précieux » ligne de clé primaire. De cette façon, si la ligne 'parent' est supprimée, le moteur refuse et déclenche une erreur.
Si vous souhaitez empêcher les suppressions intentionnelles, vous devez vous fier à la sécurité (refuser l'autorisation DELETE sur la table). Bien sûr, les utilisateurs privilégiés qui ont l'autorisation requise peuvent supprimer la ligne, il y a aucun moyen pour empêcher cela, et vous ne devriez pas essayer. Étant donné que SQL Server ne prend pas en charge la sécurité au niveau ligne, si vous devez refuser uniquement certaines lignes, vous devez revenir au dessin large et modifier votre disposition de table afin que toutes les lignes à refuser soient stockées dans une table, et les lignes autorisées à être supprimées sont stockées dans une table différente.
D'autres solutions (comme déclencheurs) sera en fin de compte une variation sur ces thèmes, ce que vous devez vraiment résoudre est la question de savoir si vous voulez éviter les suppressions accidentelles (résoluble) ou suppressions intentionnelles (impossibles à résoudre, est leur base de données, non le tiens).
Ce n'est pas une faute de frappe, la fonction est vraiment appelée RAISERROR (un E)! Consultez la documentation à http://msdn.microsoft.com/en-us/library/ms178592.aspx qui explique également les autres paramètres (gravité, 0-25 et état, 0-255). – thelem