问题与SQL Server中的where子句有关

gha*_*ani 5 c# sql-server

我有一个表名学生有(studentId,StudentName,Address,PhoneNo)

我为用户提供了一个过滤器,用于从Combobox中仅选择StudentId以获取学生的详细信息...并生成报告.

我写了以下查询来获取学生详细信息:

(select * from Students where StudentId = stdId)
Run Code Online (Sandbox Code Playgroud)

这里stdId是我从代码传递的参数

如果我选择单个studentId,它工作正常....但在用户选择Comobobox我也提供"ALL" 如果用户All从组合框中选择我想显示所有学生的详细信息

那么stdId如果用户选择我应该传递什么All

我在C#中使用了内联查询(不使用SQL存储过程)

Cur*_*urt 6

如果用户选择全部,则传递NULL@StudentId查询并将其更改为:

select *
from Students
where (StudentId=@StudentId OR @StudentId IS NULL)
Run Code Online (Sandbox Code Playgroud)


muh*_*hif 6

你可以这样做.

SELECT * from Students s
WHERE s.studentId = ISNULL(@StudentId,s.studentId) 
Run Code Online (Sandbox Code Playgroud)

在组合框中选择"全部"时,在@studentid参数中传递null.如果你不能在参数中传递null然后传递-1或你的combox选项中不能包含的任何东西,并执行如下操作:(如果-1 =全部)

 SELECT * from Students s
 WHERE s.studentId = @StudentId or @StudentId=-1
Run Code Online (Sandbox Code Playgroud)

您也可以尝试Curt给出的答案.