更快速地验证SQL Server中的现有记录

Max*_*mus 2 sql sql-server count

我想知道这两个SQL语句中的哪一个在性能和最佳实践中更好,以便找到现有记录?还有另一种有效的方法吗?

IF EXISTS(SELECT 1 FROM TABLE WHERE ID = @ID)
BEGIN
--VALIDATION
END
Run Code Online (Sandbox Code Playgroud)

要么

SET @VARIABLE = SELECT COUNT(1) FROM TABLE WHERE ID = @ID)
IF(@VARIABLE > 0)
BEGIN
--VALIDATION
END
Run Code Online (Sandbox Code Playgroud)

Jon*_*ton 6

如果你需要知道的是根本就有任何行,那么第一个更好 - EXISTS一旦子查询找到第一个匹配的行,它就会完成.

COUNT(1)必须找到所有匹配的记录,以便返回准确计数,然后将其几乎忽略不计,如果我们只是想为>0

另外(IMHO),exists语句读得更清楚(尽管第二个语句并不真正需要变量).

更新评论

保存示例存在作为变量的结果,以澄清针对该问题的一些注释:

DECLARE @exists BIT
SET @exists = (CASE 
                   WHEN EXISTS(SELECT 1 FROM TABLE WHERE ID = @ID) THEN 1
                   ELSE 0
               END)

...

IF @exists = 1 
BEGIN...
Run Code Online (Sandbox Code Playgroud)