SQL Server存储过程中LIKE搭配%通配符与参数的写法问题
SQL Server 存储过程LIKE模糊匹配写法修正
错误原因
你原有WHERE子句语法报错的核心问题:LIKE语法使用的通配符%属于字符串常量,必须用单引号包裹,直接裸写在CONCAT参数中会被SQL Server判定为非法语法。
正确实现
你需要匹配SlotValue字段符合「任意内容 + // + @module参数值 + 任意内容」格式的记录,修正后的完整存储过程代码如下:
CREATE PROCEDURE [dbo].[ModuleReferenceCount] @module nvarchar(255) AS BEGIN SET NOCOUNT ON; SELECT COUNT([dbo].[Slots].[ObjectID]) FROM [Slots] WHERE [dbo].[Slots].[SlotValue] LIKE CONCAT('%//', @module, '%') END GO
该写法可以正常命中你举例的abc//module1.xyz、lmn//module22//qrs这类符合规则的记录。
特殊场景兼容
如果传入的@module参数值本身可能包含%、_、[这类LIKE特殊通配符,会出现匹配结果不符合预期的问题,可以增加转义逻辑处理:
CREATE PROCEDURE [dbo].[ModuleReferenceCount] @module nvarchar(255) AS BEGIN SET NOCOUNT ON; -- 转义参数内的LIKE特殊字符 SET @module = REPLACE(REPLACE(REPLACE(@module, '[', '[[]'), '%', '[%]'), '_', '[_]'); SELECT COUNT([dbo].[Slots].[ObjectID]) FROM [Slots] WHERE [dbo].[Slots].[SlotValue] LIKE CONCAT('%//', @module, '%') ESCAPE '[' END GO
内容的提问来源于stack exchange,提问作者G_Zir
相关产品推荐
相关产品推荐

