在SQL Server中实现姓名批量模糊查询,可通过拆分字符串构建动态SQL或使用临时表高效处理,将“张三,李四”等姓名用逗号分隔,通过STRING_SPLIT函数拆分为列表,再结合LIKE子句查询:SELECT * FROM 表名 WHERE 姓名 LIKE '%'+value+'%' AND value IN (SELECT value FROM STRING_SPLIT('张三,李四', ',')),若数据量大,建议为姓名字段创建索引提升性能,或使用表变量存储拆分结果后JOIN查询,避免重复解析字符串,注意动态SQL需防范注入风险,参数化查询更安全。在日常数据库操作中,经常需要根据部分姓名信息批量查询用户数据,例如同时查询姓名包含“张三”“李四”等多个关键词的记录,若采用传统的单条LIKE查询,不仅效率低下,还难以维护,本文将结合SQL Server的特性,介绍几种高效的批量模糊查询实现方法,并附上具体代码示例和优化建议。
批量模糊查询的常见场景与需求
假设有一个用户表Users,结构如下:
CREATE TABLE Users (
ID INT PRIMARY KEY,
Name NVARCHAR(50),
Age INT,
Department NVARCHAR(50)
);
现在需要查询所有姓名中包含“张三”“李四”中任意一个关键词的用户记录,若手动写OR连接多个LIKE条件,当关键词数量较多时(如几十个),SQL语句会变得冗长且难以维护,批量模糊查询的需求便凸显出来。

批量模糊查询的实现方法
动态SQL拼接OR条件(适合少量或动态关键词)
原理:将多个关键词通过OR连接,动态拼接SQL语句,执行后返回结果。
示例:使用STRING_SPLIT拆分关键词(SQL Server 2016及以上版本)
假设关键词为“张三,李四”(逗号分隔),可通过以下方式实现:
DECLARE @keywords NVARCHAR(MAX) = '张三,李四'; -- 待查询的关键词列表 DECLARE @sql NVARCHAR(MAX); -- 动态拼接SQL:初始化基础查询,循环添加OR条件 SELECT @sql = N'SELECT * FROM Users WHERE 1=0 '; -- 初始条件为假,方便后续拼接OR SELECT @sql = @sql + ' OR Name LIKE ''%' + REPLACE(REPLACE(value, '''', ''''''''), '%', '[%]') + '%''' FROM STRING_SPLIT(@keywords, ','); -- 执行动态SQL EXEC sp_executesql @sql;
说明:
STRING_SPLIT函数用于拆分逗号分隔的关键词列表,返回一个包含value列的表变量。REPLACE(value, '''', '''''''')用于转义关键词中的单引号,避免SQL注入。REPLACE(value, '%', '[%]')用于转义通配符,确保其作为普通字符匹配。
优点:简单直接,适合关键词数量较少或动态生成的场景。
缺点:关键词较多时,SQL语句长度可能超出限制,且需注意SQL注入风险。
临时表/表变量存储关键词,关联查询(适合较多关键词)
原理:将关键词存入临时表或表变量,与目标表通过LIKE或CHARINDEX函数关联查询。
示例:使用临时表存储关键词
-- 1. 创建临时表并插入关键词 CREATE TABLE #
文章版权声明:除非注明,否则均为xmsdn原创文章,转载或复制请以超链接形式并注明出处。

