如果列表中的任何值在SQL表中不存在,则返回错误

问题描述 投票:-1回答:1

我有一个如下表。

EmployeeTable

我想使用IN子句在select查询中传递值列表。例如

SELECT * FROM Employee WHERE EmployeeName IN ('Tim','Bob','Jim') 

如果表中不存在值列表​​中的任何记录,是否可以修改查询以返回错误。

例如

案例1:如果查询的输入为(('Tim','Bob','Jim')] >>,则由于表中不存在Jim,它应该返回错误。

案例2:如果查询的输入是((Tim','Bob')] >>,则该查询不应返回错误,因为列表中的所有条目都已存在于DB表中。

情况3:如果查询的输入是(('Tim','Bob','Rick','Sam','Gary')] >>,则不应返回错误。

简而言之,如果表中不存在输入列表中的任何值,我想返回一个错误。

我想知道这是否可行,如果可行,这是一个好习惯。我们正在使用SQL SERVER 2014。

我有一个如下表。我想使用IN子句在select查询中传递值列表。例如SELECT * FROM Employee WHERE EmployeeName IN('Tim','Bob','Jim')有没有办法...

您可以将employee留在列表中并检查NULL,即在employee中找不到匹配的行。在外部查询中对该结果使用EXISTS

SELECT <your value>
       WHERE EXISTS (SELECT *
                            FROM (VALUES ('Tim'),
                                         ('Bob'),
                                         ('Jim')) v (name)
                                 LEFT JOIN employee e
                                           ON e.employeename = v.name
                            WHERE e.employeename IS NULL);
sql-server select sql-server-2014
1个回答
0
投票

您可以将employee留在列表中并检查NULL,即在employee中找不到匹配的行。在外部查询中对该结果使用EXISTS

SELECT <your value>
       WHERE EXISTS (SELECT *
                            FROM (VALUES ('Tim'),
                                         ('Bob'),
                                         ('Jim')) v (name)
                                 LEFT JOIN employee e
                                           ON e.employeename = v.name
                            WHERE e.employeename IS NULL);
© www.soinside.com 2019 - 2024. All rights reserved.