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
//如果名称为空
或上述查询名称是否有值。但这是正确的方式吗?
当然会起作用。
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 + ")";
}
但是,请使用参数化查询!请参阅有关如何执行此操作的此问题。