Access查询:TextBox为空时需包含Occupation为空记录的SQL修正
解决Access查询中包含空Occupation字段记录的问题
原SQL语句的问题在于:当txtoccupation为空时,Occupation = IIF(txtoccupation IS NULL, Occupation, txtoccupation)等价于Occupation = Occupation,但在Access中NULL值与任何值(包括自身)的相等比较都会返回未知,不会被纳入查询结果,因此Occupation为NULL的记录被过滤掉了。
要实现需求,需要调整WHERE条件,明确区分两种场景:
- 当
txtoccupation为空(包括NULL或零长度字符串)时,返回所有记录; - 当
txtoccupation有输入值时,仅返回Occupation与输入值匹配的记录。
修正后的SQL语句
SELECT [EmpID] ,[FirstName] ,[LastName] ,[Education] ,[Occupation] ,[YearlyIncome] ,[Sales] ,[HireDate] FROM [Employee] WHERE (Nz(txtoccupation, "") = "") OR (Occupation = txtoccupation)
逻辑说明
Nz(txtoccupation, "") = "":用Nz函数将文本框的NULL值转换为空字符串,统一判断文本框是否为空的逻辑;- 当文本框为空时,
(Nz(...) = "")为真,OR条件整体成立,返回所有记录(包括Occupation为NULL或空字符串的); - 当文本框有值时,
(Occupation = txtoccupation)生效,仅返回匹配的记录。
如果仅需要判断文本框为NULL的场景(不处理零长度字符串),可以调整为:
SELECT [EmpID] ,[FirstName] ,[LastName] ,[Education] ,[Occupation] ,[YearlyIncome] ,[Sales] ,[HireDate] FROM [Employee] WHERE (txtoccupation IS NULL) OR (Occupation = txtoccupation)
内容的提问来源于stack exchange,提问作者H WM
相关产品推荐
相关产品推荐

