2011-11-02 4 views
4

J'ai l'intérieur d'une procédure stockée:serveur SQL - procédure stockée - ignorer exception

INSERT INTO SitesCategories(SiteID, CategoryID) VALUES(@SITEID, @TempCId); 

Cet insert pourrait lancer des exceptions parce que j'ai cette contrainte sur la table:

ALTER TABLE dbo.SitesCategories 
    ADD CONSTRAINT UniqueSiteCategPair 
    UNIQUE (SiteId,CategoryID); 

J'ai fait cette contrainte de sorte que je n'aurais pas à vérifier lors de l'insertion des uniques des paires (@SITEID, @TempCId). Mais je ne veux pas qu'une exception SQl soit levée quand ceci est exécuté dans la procédure stockée. Comment puis-je "attraper" l'exception à l'intérieur de la procédure stockée et continuer les opérations dans la procédure?

Répondre

2

Si vous créez votre UNIQUE CONSTRAINT avec le réglage IGNORE_DUP_KEY = ON, puis les doublons seront ignorés en silence, par exemple ils ne seront pas insérés dans votre table, mais aucune exception ne sera générée, soit:

ALTER TABLE dbo.SitesCategories 
    ADD CONSTRAINT UniqueSiteCategPair 
    UNIQUE (SiteId,CategoryID) WITH (IGNORE_DUP_KEY = ON); 
+0

c'est ce dont j'ai besoin – Ghita

5
  BEGIN TRY 
       INSERT INTO SitesCategories(SiteID, CategoryID) VALUES(@SITEID, @TempCId); 
      END TRY 
      BEGIN CATCH 
      END CATCH; 
+0

Tnx Anja. C'est donc le moyen d'attraper des exceptions dans T-SQL. J'ai choisi la réponse de marc_s car c'était exactement ce dont j'avais besoin sans le savoir :-) – Ghita

Questions connexes