c# - 以动态/编程方式将 WHERE 子句添加到 SQL

标签 c# sql sql-server stored-procedures ado.net

如何以编程方式将搜索条件添加到 SQL 存储过程? 在我的应用程序 (C#) 中,我使用存储过程 (SQL Server 2008R2)

ALTER PROCEDURE [dbo].[PROC001]
@userID varchar(20),
@password varchar(20)
AS
SELECT * FROM tUsers WHERE RTRIM(Name) = @userID AND RTRIM(Password) = @password

我想通过更多条件扩展此查询,现在我不知道有多少条件会因程序执行而使用此查询。2、3、6 或 20。我想以编程方式添加这些条件,例如:

SELECT * FROM tUsers WHERE RTRIM(Name) = @userID AND RTRIM(Password) = @password
AND Field2 = '1' AND Field3 = '0' OR Field4 <> '8' AND Field5 < '100' ....

是否可以动态地向存储过程发送条件?

最佳答案

您只能在 sql 中执行此操作,如下所示:

SELECT * 
FROM tUsers 
WHERE 1 = 1
  AND (@userID IS NULL OR RTRIM(Name) = @userID )
  AND (@password IS NULL OR RTRIM(Password) = @password)
  AND (@field2 IS NULL OR Field2 = @field2)
....

如果传递给存储过程的任何参数具有 NULL 值,则整个条件将被忽略。

请注意:我添加了 WHERE 1 = 1 以使查询在没有参数传递给查询的情况下工作,在这种情况下所有结果集都将被返回,因为 1 = 1 始终为真。

关于c# - 以动态/编程方式将 WHERE 子句添加到 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11329823/

相关文章:

sql - WHERE 子句中的 IS NULL 导致查询运行缓慢

sql-server - SQL Server 无效版本 : 15 (Microsoft. SqlServer.Smo)

sql - not null 在 oracle 中启用 novalidate 问题

c# - 使用 linq 选择字典列表

c# - agsXMPP OnMessage 不包含消息正文

c# - 多个 Action 可以服务于同一个 View 吗?

sql - "AS"附近的语法错误

sql - 如何测试 SQL Server Geography 列值是否为 POINT(0 0)?

sql - 选择子表的前两行

c# - 有没有一种简单的方法可以按字母顺序对字符串中的字符进行排序