You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 01:14:54