另一个标题可能是:检查是否存在多行?
结合使用 SQL 和 C#,如果列表中的所有产品都存在于表中,我希望方法返回 true。如果它可以在 SQL 中完成,那将是可取的。我编写了一个方法,使用以下 SQL 返回单个 productID
是否存在:
SELECT productID FROM Products WHERE ProductID = @productID
如果这返回一行,则 c# 方法返回 true,否则返回 false。
现在我想知道我是否有一个产品 ID 列表(请注意,不是一个庞大的列表,通常在 20 以下)。如何编写一个查询,如果所有产品 ID 都存在则返回一行,如果一个或多个产品 ID 不存在则不返回行?
(Maybe something involving "IN" like:
SELECT * FROM Products WHERE ProductID IN ('1', '10', '100', 'ABC'))
编辑:
结果如何表达对我来说并不重要。查询是否返回 1
或 0
,空结果集或非空结果集,真或假都没有关系。我更喜欢 1) 易于阅读和理解和 2) 高性能的答案
我设想将产品 ID 列表与 SQL 连接起来。显然,这会将代码打开到 SQL 注入(产品 id 实际上是 varchar
。在这种情况下,机会很小,但仍然希望避免这种可能性)。所以如果有办法解决这个问题会更好。使用 SQL Server 2005。
产品 ID 是 varchar
原文由 User 发布,翻译遵循 CC BY-SA 4.0 许可协议
鉴于您更新的问题,这些是最简单的形式:
如果
ProductID
是你想要的唯一然后对照
3
检查结果,即您查询的产品数量(最后一部分可以在 SQL 中完成,但在 C# 中可能更容易完成,除非您在SQL)。如果
ProductID
不是唯一的当问题被认为需要在所有
ProductIds
都存在且不存在时返回行时:或者
如果你真的打算对结果做点什么。否则,简单的
SELECT 1 WHERE (SELECT ...)=3
将按照其他答案所述或暗示的方式进行。