La syntaxe SQL pour vérifier si l'INSERTION a été couronnée de succès?
Je suis en train de travailler sur un projet scolaire que me veut introduire de nouvelles valeurs dans une table de base de données et ensuite de l'impression d'un message en fonction de si oui ou non l'INSERTION a été couronnée de succès.
La question qui va comme ceci:
Écrire un script qui tente d'insérer une nouvelle catégorie nommée “Guitares”
dans la table Catégories. Si l'insertion est réussie, le script
devrait afficher ce message: SUCCÈS: le Record a été inséré.Si la mise à jour échoue, le script doit afficher un message
quelque chose comme ceci: ÉCHEC: Enregistrement n'a pas été inséré. Erreur 2627:
La Violation de la contrainte de CLÉ UNIQUE 'UQ_Categori_8517B2E0A87CE853'.
Impossible d'insérer une clé en double dans l'objet 'dbo.Catégories'. Le double
valeur de la clé est (Guitares).
Actuellement, cette table Catégories se compose de 2 colonnes: code catégorie et le nom de la Catégorie. Il est rempli avec les valeurs
1 Guitars
2 Basses
3 Drums
4 Keyboards
Évidemment les Guitares catégorie que la question veut que vous insérez est déjà là, donc je suppose que le point de l'ensemble de la question est de le faire pour imprimer le message d'erreur. La logique de la question semble assez simple; insérer les Guitares catégorie dans la table. Si l'insertion a été couronnée de succès, d'impression tel-et-tel. Si elle a échoué, imprimer soi-and-so. Je ne suis pas sûr de la syntaxe. Voici le code SQL que j'ai eu jusqu'à présent:
USE MyGuitarShop;
INSERT INTO Categories (CategoryID, CategoryName)
VALUES (5, 'Guitars')
IF ( ) --insert is successful
PRINT 'SUCCESS: Record was inserted'
ELSE --if insert is unsuccessful
PRINT 'FAILURE: Record was not inserted.'
PRINT 'Error 2627: Violation of UNIQUE KEY constraint 'UQ__Categori__8517B2E0A87CE853'.'
PRINT 'Cannot insert duplicate key in object 'dbo.Categories'. The duplicate key value is (Guitars).'
Je me sens comme il y en avait une sorte d'équation booléenne que SI l'instruction (SI INSÉREZ = succès, SI le succès = TRUE, etc.) mais je ne suis pas sûr de la façon de l'écrire. Suis-je sur la bonne voie?
EDIT: je devrais mentionner que je suis à l'aide de SQL Server 2012
SQL Server 2012 pour être exact
OriginalL'auteur EJF | 2014-02-03
Vous devez vous connecter pour publier un commentaire.
Je voudrais utiliser try/catch me
Vous devriez être en mesure de prendre à partir de là.
Le catch imprimer PK violation, même si il n'en est pas une. Besoin de vérifier le code d'erreur!! msdn.microsoft.com/en-us/library/ms175069.aspx ERROR_NUMBER()
OriginalL'auteur Dan Bracuk
OriginalL'auteur LearnCode
Vous pouvez vérifier @@ROWCOUNT pour voir comment un grand nombre de LIGNES a été inséré ou @@ERROR si votre code de retourner un code d'erreur.
Ici quelques reff à ce sujet :
http://social.msdn.microsoft.com/Forums/sqlserver/en-US/11960c24-cad7-4f06-ae6c-219e46d555a0/how-to-know-if-insertion-is-successful-?forum=transactsql
http://www.sommarskog.se/error-handling-II.html
OriginalL'auteur Jun Rikson
Il y a deux catégories d'erreur de manipulation.
À l'aide de l' @@ERROR variable système pour vérifier les erreurs. À l'aide d'un DÉBUT/FIN de l'ESSAYER et de début/FIN de CAPTURE.
En outre l'instruction RAISERROR ou de JETER des déclarations peuvent être utilisés pour les erreurs spécifiques à l'entreprise des règles.
Découvrez mes quatre articles de blog sur le sujet. Des tonnes de code.
http://craftydba.com/?tag=error-handling
J'ai codé ce à l'aide de l'algorithme initial que vous avez commencé avec un if ELSE.
OriginalL'auteur CRAFTY DBA