我有一个存储过程:
INSERT INTO SitesCategories(SiteID, CategoryID) VALUES(@SITEID, @TempCId);
这个插入可能会抛出异常,因为我在表上有这个约束:
ALTER TABLE dbo.SitesCategories
ADD CONSTRAINT UniqueSiteCategPair
UNIQUE (SiteId,CategoryID);
我做了这个约束,这样我就不必检查何时插入双引号(@SITEID,@ TempCId)。但是我不希望在存储过程中执行此操作时抛出SQl异常。如何在存储过程中“捕获”异常并继续执行过程中的操作?
答案 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);