SQL Server中sp_executesql带NVARCHAR参数无返回结果问题求助
修复动态SQL存储过程中LIKE查询无结果的问题
你的存储过程执行后无返回行,核心问题是动态SQL中参数的引用方式错误:当前代码把@SerchText作为字符串字面量嵌入到了LIKE条件里,而非使用传入的参数值。
问题原因
原代码里的N''%@SerchText%''会让SQL将@SerchText当成普通字符串处理,实际执行的是查找标题包含@SerchText这个文本的记录,自然匹配不到数据库中存在的개인경비 청구서 작성 및 교육这条数据。
修复方案(推荐安全写法)
修改参数使用方式,在传入动态SQL前给参数添加通配符,动态SQL中直接引用参数:
CREATE PROCEDURE [dbo].[Notice_Dels] @SerchText NVARCHAR(200) AS BEGIN DECLARE @Query NVARCHAR(MAX); -- 为搜索文本添加通配符 SET @SerchText = N'%' + @SerchText + N'%' SET @Query = N'SELECT N.No, N.Title FROM test N WHERE N.Title LIKE @SerchText' PRINT @Query EXEC SP_EXECUTESQL @Query, N'@SerchText NVARCHAR(200)', @SerchText END
另一种写法(不推荐,存在SQL注入风险)
如果必须直接拼接字符串,需要处理单引号防止语法错误:
CREATE PROCEDURE [dbo].[Notice_Dels] @SerchText NVARCHAR(200) AS BEGIN DECLARE @Query NVARCHAR(MAX); -- 替换单引号避免语法错误,同时降低注入风险 SET @Query = N'SELECT N.No, N.Title FROM test N WHERE N.Title LIKE N''%' + REPLACE(@SerchText, N'''', N'''''') + N'%''' PRINT @Query EXEC SP_EXECUTESQL @Query END
验证
执行EXEC [Notice_Dels] N'개인경비';即可正确返回匹配的记录。
内容的提问来源于stack exchange,提问作者Hong Van Vit
相关产品推荐
相关产品推荐

