sxbjxxr 2024-06-28 17:54 采纳率: 0%
浏览 1

存储过程提示等号后有语法错误,如何解决?

不输入参数时存储过程查询结果没有问题
见下图

img

如果输入参数后,提示等号附近有语法错误,我查看了,实在找不出原因,请帮忙查看,谢谢!

img

  • 写回答

1条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-06-28 17:54
    关注

    引自免费微信小程序:皆我百晓生

    经过观察您的存储过程代码,我注意到了一些可能引起语法错误的地方。我会逐一指出并给出修改建议。

    1. 在声明变量和设置变量值时,您需要使用正确的语法。在SQL Server中,声明变量后需要用等号 "=" 来设置变量的值。在您的代码中,您使用了 "set@where=" 这样的语法,这是不正确的。应该使用 "set @where = " 的形式。同样,在判断条件和设置变量的过程中也需要确保语法正确。
    2. 在SQL语句中,字符串需要用单引号 ' 来包围。在您的代码中,有一些地方使用了双引号 " ,这是不正确的。应该将双引号改为单引号。
    3. 在动态构建SQL查询语句时,需要确保所有的引号、括号和连接符都正确配对和闭合。在您的代码中,有一些地方的引号、括号没有正确闭合或配对。

    基于以上分析,我为您修改了存储过程的代码,请尝试使用以下代码:

    ALTER PROCEDURE [dbo].[htbi_stock1] 
        @wlbm nvarchar(50), 
        @ck nvarchar(50), 
        @kw nvarchar(50) 
    AS 
    BEGIN 
        declare @where nvarchar(1000); 
        declare @stockje nvarchar(max); 
        set @where = ''; 
    
        if @wlbm > '' 
        begin 
            set @where = @where + ' and wlbm = ''' + @wlbm + ''' '; 
        end 
    
        if @ck <> '' 
        begin 
            set @where = @where + ' and ckmc = ''' + @ck + ''' '; 
        end 
    
        if @kw <> '' 
        begin 
            set @where = @where + ' and kwmc = ''' + @kw + ''' '; 
        end 
    
        SET @stockje = N'select wlbm as 物料编码, wlmc as 物料名称, ggxh as 规格型号, ckdm as 仓库代码, ckmc as 仓库, kwdm as 库位代码, kwmc as 库位, sl as 数量, je as 金额 from htbj_stock ' + @where; 
        EXEC sp_executesql @stockje; 
    END;
    

    请注意,这个修改是基于您提供的代码片段进行的,如果在实际使用中还有其他问题或错误,请进一步检查并修改。同时,为了避免SQL注入攻击的风险,请确保在使用动态SQL语句时采取适当的安全措施,如参数化查询或使用安全机制来保护您的数据库。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 6月28日

悬赏问题

  • ¥20 ic卡dump文件校检码解密
  • ¥15 关于:接收到的数据不是有效的JSON格式
  • ¥15 apdl语言如何增加受力分析
  • ¥15 算法对比:学校优化算法与蚁群算法对比
  • ¥15 机电一体化系统设计说明书
  • ¥20 sgy数据提取地震波速,有人能回答吗小馋
  • ¥20 c#实现打开word的功能,并且需要安装成windows服务,word打不开怎么办
  • ¥15 python用ARIMA时间预测模型预测数据出错,急!
  • ¥30 为什么后端传给前端vue的河流json数据不在地图中显示出来
  • ¥50 关于弹性波动方程求解的问题: