sql - SQL 查询中的条件Where 子句

标签 sql sql-server sql-server-2005 tsql

我正在开发用于生成报告的 MVC 应用程序。我提供了许多搜索选项,如下所示

Customer id
Customer name
Customer E-mail
State
Country 

用户1:

如果某个用户仅向某些值提供输入,例如

Customer id = 1
Customer name = A

默认情况下,其他参数作为 null 传递给存储过程。

Customer E-mail
State
Country 

用户2:

如果某个用户只会输入某些值,例如

客户邮箱=xtz@gmail.com

默认情况下,其他参数作为 null 传递给存储过程。

Customer id
Customer name
State
Country 

如何在存储过程的 SQL 查询中使用 where 子句。我们可以像下面这样做吗

string qry = select * from table_name where status != d

if (@customerID!=null)
    qry = qry + "and customer_id=@customerID"
if (@customerName!=null)
    qry = qry + "and customer_name=@customerName"

请告诉我对此的最佳方法。

谢谢, 维鲁

最佳答案

如果您要创建动态 SQL,那么您可以像上面一样执行操作:

DECLARE @SQL NVARCHAR(MAX)
SELECT @SQL =  'SELECT * FROM TABLE '
if (@customerID IS NOT NULL)
    SQL = SQL + " AND customer_id = @customerID"

或者另一种选择是像这样处理

SELECT *
FROM TABLE
WHERE (@customerID IS NULL OR customer_id = @customerID)

我更喜欢第二个,因为它使用参数化变量。第一个示例需要更深入地考虑恶意输入。

关于sql - SQL 查询中的条件Where 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5874108/

相关文章:

sql - 需要有关 Northwind 数据访问层教程的更正 SQL 语法的帮助

php - mysql查询只返回字符串的首字母

.NET、SqlConnection 对象和多线程

sql - SQL Server 2005-如何为数据库一次备份创建新的备份集

sql - 在 SQL 中选择包含所有子项的父记录

sql-server-2005 - 从 sql server 2005 中的现有文本文件(.txt)中读取

sql - 使用 GROUP BY 和 COUNT 执行 SQL UPDATE

php - perl 样式正则表达式 mysqldump 列定义

sql - 这个数据库设计如何显示员工总数呢?

mysql - 将三个表与 2 个不同的公共(public)列连接起来