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

执行[dbo].[usp_compare_metadata]存储过程报AND附近非布尔类型表达式错误

存储过程执行报错问题原因及解决方案

错误原因

  • 核心问题是传入的@Where参数格式不符合存储过程的设计要求。存储过程中会将@Where参数直接拼接在查询sys.tables的WHERE子句之后,要求传入的是合法的布尔判断表达式,而你传入的是纯表名字符串t_compliance_control,拼接后生成的动态SQL为:
select name from db05.sys.tables where t_compliance_control AND name not in (...) order by 1

WHERE子句后直接跟表名,SQL无法将其识别为判断条件,就会抛出「预期条件的上下文中指定了非布尔类型的表达式」的错误。

  • 存储过程本身的参数注释也明确标注了@Where的正确用法示例:where name like 't_product_arrears%',你传入的值不符合该格式要求。

解决方案

场景1:仅需要对比t_compliance_control单张表

修改调用时的@Where参数值为完整的判断条件:

exec [dbo].[usp_compare_metadata] 
     @source_db = 'db05',
     @target_db = 'db01',
     @Where = 'name = ''t_compliance_control''', -- 注意单引号转义
     @show_diff = 0,
     @Control = '-d'

场景2:需要匹配某一类规则的表

按照注释示例的格式传入模糊匹配条件即可,比如匹配所有前缀为t_compliance的表:

@Where = 'name like ''t_compliance%'''

优化建议(可选)

可以在存储过程开头增加@Where参数的合法性校验逻辑,比如判断参数非空时是否包含name关键字,避免后续拼接SQL出错,同时也能降低SQL注入风险。


内容的提问来源于stack exchange,提问作者Pranay Kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 19:45:03