SQL Server 2008 - SQL 中的 IN 子句,没有值 - C#

本文关键字:SQL IN Server 2008 中的 子句 | 更新日期: 2023-09-27 17:56:29

>我有以下C#程序使用的查询:

var names = string.Join(",", activeNames.Select(n => string.Format("'{0}'", n)).ToArray());
var query = @"SELECT * FROM TableA WHERE NOT Name IN (" + names + ")";

只要名称中有值,上面的查询就有效,例如 name = 'Ken', 'John'这行得通。但如果名称为空,查询如下所示:

SELECT * FROM TableA WHERE NOT Name IN () 

这是无效语法如何使此查询工作?

我可以使用两个单独的查询,例如: SELECT * FROM TableA//如果名称为空

或上述查询名称是否有值。但这是正确的方式吗?

SQL Server 2008 - SQL 中的 IN 子句,没有值 - C#

当然会起作用。

var query = @"SELECT * FROM TableA"
if(activeNames.length > 0)
  query += " WHERE NOT Name IN (" + names + ")";

如果Name从不为空,则可以在 IN 子句中添加一个空值:

@"SELECT * FROM TableA WHERE NOT Name IN (''," + names + ")";

您可以只为 names 变量的值添加验证。

string query = string.empty;
if (string.IsNullOrEmpty(names))
{
 query = "SELECT * FROM TableA";
}
else
{
 query = "SELECT * FROM TableA WHERE NOT Name IN ("....
}

只需使用单独的查询。根据您的信息,无需破解WHERE子句。

var query = @"SELECT * FROM TableA";
if (activeNames.Any()){
    var names = string.Join(",", activeNames
                                    .Select(n => string.Format("'{0}'", n))
                                    .ToArray());
    query += " WHERE NOT Name IN (" + names + ")";
}

但是,请使用参数化查询!请参阅有关如何执行此操作的此问题。