sql-server - Access/SQL Server 存储过程搜索查询 - 空值
问题描述
我已将我的 Access 数据表转移到 SQL 服务器,同时仍想将 Access 用于前端。这一切都运作良好,但此后使查询运行速度变慢。运行最慢的是搜索记录的查询。
因此,我正在将查询转换为 SQL 存储过程,并且它几乎可以工作,从我在这里获得的帮助。搜索表单目前有 2 个搜索字段(名字和姓氏),但一旦我能够解决问题,这将扩展到更多搜索字段。
我面临的问题是处理搜索字段中的空值。例如,如果用户在 firstname 字段和 surname 字段中输入文本字符串,则查询将返回正确的结果。但是,如果任一搜索字段留空。查询不起作用,您会收到错误调试消息。
SQL 存储过程:
更改程序 [dbo].[ZSearch]
@FirstName varchar(100),@Surname varchar(100)
开始
SELECT [First name], [Surname] FROM [Names] where ([First Name] LIKE '%' + @FirstName + '%') 和 ([Surname] LIKE '%' + @Surname + '%')
结尾
然后在 Access 中,我有一个直通查询,即:
执行 Z 搜索
然后最后,在我的表单上,我有一个按钮,单击时运行以下 VB:
Private Sub Command4_Click() Dim rst As DAO.Recordset
Dim Firstname As String Dim Surname As String Firstname = [Forms]![Search]![SearchFirstName] Surname = [Forms]![Search]![SearchSurname] With CurrentDb.QueryDefs("qryPassR") .SQL = "EXEC ZSearch " & Firstname & ", " & Surname 'Debug.Print .SQL Set rst = .OpenRecordset() DoCmd.OpenQuery "qryPassR" End With End Sub
请有人可以帮助我处理搜索字段中的空值。我认为需要说明的是,如果搜索字段为空,则将其视为通配符,如果不为空,则使用其中的内容。
非常感谢
解决方案
您可以使用ISNULL或添加 where 子句,如下所示:
-- WHERE ([First Name] LIKE '%' + ISNULL(@FirstName, '') + '%')
WHERE (@FirstName IS NULL OR [First Name] LIKE '%' + @FirstName + '%')
推荐阅读
- xamarin - 如何使用 VerticalOptions FillAndExpand 使 Xamarin 图像垂直扩展
- google-cloud-run - Nginx 容器无法在 Cloud Run 上启动
- c++ - 如何正确卸载 DLL 本身?
- javascript - 停止 HTML iFrame 函数在页面加载时运行
- chart.js - ChartJS with ChartJS DataLabels:更改每个数据集的颜色值标签
- bootstrap-4 - 对根目录下一个文件夹中的样式表的更改不会立即对括号和 XAMPP 生效
- symfony - 三个查询合二为一
- express - 仅将 Apollo 服务器部署到 heroku 时出现问题
- stream - 如何在带有全息视图的数据着色器中启用自动重采样以及通过管道进入 DynamicMap 的(实时)数据流?
- c# - 通过单击按钮更改图片框数组中的图像