sql - 检查 NULL 或 0

标签 sql sql-server database tsql

在 SQL 中检查 NULL 或 0 值的速度更快

我想要最快的方法来检查表中是否已有值。

例如哪个更快:

IF ((SELECT ID FROM [SomeTable].[dbo].[BlockedSubscriberNumbers] 
     WHERE VALUE = @myVal) is null )
BEGIN
....
END
ELSE
BEGIN
....
END

IF ((SELECT COUNT(ID) FROM [SomeTable].[dbo].[BlockedSubscriberNumbers]
     WHERE VALUE = @myVal) > 0 )
BEGIN
....
END
ELSE
BEGIN
....
END

在 T-SQL 中也确实在频繁累积的情况下发挥作用。我的意思是,在大多数情况下,它会更快地进入 IF block ,而如果它主要进入 ELSE,则速度会更慢。

最佳答案

好吧,它们实际上会做不同的事情,您无法在 SQL 中检查 NULL 是否大于 0。

你应该做的是这个。

    IF (ISNULL((SELECT ID FROM [SomeTable].[dbo].[BlockedSubscriberNumbers] 
         WHERE VALUE = @myVal), 0) > 0 )
    BEGIN
    ....
    END
    ELSE
    BEGIN
    ....
    END

你的意思是等于 0 吗?因为你的问题是

What is faster in SQL to check value for NULL or 0

这部分是关于 Joe 关于多个结果集的评论

您可以使用 ISNULL 对 Select ID 执行某种聚合函数,以确定是否有任何值大于 0(当然假设您的所有值都大于 0)。

关于根据 OP 评论确定是否有任何行包含该信息

IF(从 [SomeTable].[dbo].[BlockedSubscriberNumbers] 中选择计数(ID),其中值 = @myVal)= 0 应该告诉你是否有包含该值的行

最终编辑

只需使用Exists

如果存在(从 [SomeTable].[dbo].BlockedSubscriberNumbers] 中选择 ID,其中 Values = @myVal)

关于sql - 检查 NULL 或 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3988249/

相关文章:

ASP.Net 数据库播种

sql - 仅选择所有链接记录都满足条件的记录

sql - 非常庞大的 SQL 数据库 : How should the schema look like?

MySQL JOIN 条件查询

php - 使用 PDO 的 SELECT 查询失败,在 phpMyAdmin 中有效

mysql - 将两列相乘并显示在新的一列中

java - 检查用户名和密码是否存在于表中

database - Azure 数据库延迟消除应用程序

javascript - 回显的数据不在正确的行中

sql - 通过 OR 或 AND (Arel, Rails3) 连接(粘合)where 条件