我想知道这两个SQL句子中的哪一个在性能和最佳实践中更好,以便找到现有记录?还有另一种有效的方法吗?
IF EXISTS(SELECT 1 FROM TABLE WHERE ID = @ID)
BEGIN
--VALIDATION
END
OR
SET @VARIABLE = SELECT COUNT(1) FROM TABLE WHERE ID = @ID)
IF(@VARIABLE > 0)
BEGIN
--VALIDATION
END
答案 0 :(得分:6)
如果你需要知道的是根本就有任何行,那么第一个更好 - 一旦子查询找到第一个匹配的行,EXISTS
就会完成。
COUNT(1)
必须找到所有匹配的记录才能返回准确的计数,如果需要的只是>0
另外(恕我直言),存在语句读得更清楚(尽管第二个语句并不真正需要变量)。
更新评论
保存示例存在结果作为变量,以澄清针对该问题的一些评论:
DECLARE @exists BIT
SET @exists = (CASE
WHEN EXISTS(SELECT 1 FROM TABLE WHERE ID = @ID) THEN 1
ELSE 0
END)
...
IF @exists = 1
BEGIN...