【发布时间】:2016-04-13 09:10:53
【问题描述】:
在构建插入简单链接表的存储过程时,它应该检查 FK 是否存在并优雅地返回错误,还是让 SQL 抛出异常?
- 最佳做法是什么?
- 什么是最有效的?
以防有人不明白我的问题:
-
Table A -
Table B Table AB
我应该这样做:
IF EXISTS(SELECT 1 FROM A WHERE Id = @A) AND EXISTS(SELECT 1 FROM B WHERE Id = @B)
BEGIN
INSERT AB (AId,BId) VALUES (@A, @B)
END
ELSE
--handle gracefully, return error code or something
或
INSERT AB (AId,BId) VALUES (@A, @B)
让 SQL 抛出异常
谢谢
【问题讨论】:
-
如果您担心性能并且预计会有很多外键违规,请查看Performance impact of different error handling techniques 并自行衡量对您的数据库和硬件的影响。
标签: sql sql-server stored-procedures