SQL server - 存储过程 - 忽略异常

时间:2011-11-02 09:42:42

标签: sql-server stored-procedures

我有一个存储过程:

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

这个插入可能会抛出异常,因为我在表上有这个约束:

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

我做了这个约束,这样我就不必检查何时插入双引号(@SITEID,@ TempCId)。但是我不希望在存储过程中执行此操作时抛出SQl异常。如何在存储过程中“捕获”异常并继续执行过程中的操作?

2 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:3)

如果您使用UNIQUE CONSTRAINT设置创建IGNORE_DUP_KEY = ON,则会默默忽略重复项,例如它们不会被插入到您的表中,但也不会抛出任何异常:

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