sqlserver中id(int)in(字段(varchar))报错如何修改

select loginid from HrmResource where id in

(select cast(sbry as varchar(max)) as sbry from uf_gdjcsj where 1=1

${if(len(p)==0,"","and zxmc='"+p+"'")})

报错显示在将varchar值‘148,123’转换成数据类型int失败

image.png

柒年呀 发布于 2021-7-13 16:22 (编辑于 2021-7-13 16:40)
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共3回答
最佳回答
0
axingLv6专家互助
发布于2022-1-15 00:14

zxmc是数字类型,要对它传入148,123两个数,需将条件改为

${if(len(p)==0,"","and zxmc in ("+p+")")})

最佳回答
0
Z4u3z1Lv6专家互助
发布于2021-7-13 16:27

select loginid from HrmResource where CONVERT(NVARCHAR(MAX),id) in

(select sbry from uf_gdjcsj where 1=1

${if(len(p)==0,"","and zxmc='"+p+"'")})

  • 柒年呀 柒年呀(提问者) sbry是text类型
    2021-07-13 16:34 
  • Z4u3z1 Z4u3z1 回复 柒年呀(提问者) 那把子查询恢复成你原来的语句
    2021-07-13 16:38 
  • 柒年呀 柒年呀(提问者) 回复 Z4u3z1 不报错但是查出来是空
    2021-07-13 16:40 
  • Z4u3z1 Z4u3z1 回复 柒年呀(提问者) 你确定 uf_gdjcsj.sbry与HrmResource.id 存在对应关系
    2021-07-13 16:48 
  • 柒年呀 柒年呀(提问者) 回复 Z4u3z1 当传过来的值是‘123’类型时是可以查出来对应的数据,变成\'123,124\'这种就是空,但真实库里是可以查到值得
    2021-07-13 16:50 
最佳回答
0
liu.yangLv2初级互助
发布于2021-7-13 16:32(编辑于 2021-7-13 16:35)

'148,123' 是参数传的吗?是的话  把 参数 两边的  '  去掉

in  ('"+参数+"') 改成   in ("+参数+")

如果你要强制类型转换的话 是不可以的哦  '148,123' 中间的 ,就是字符串 是不可能强制转换的

  • 柒年呀 柒年呀(提问者) 148,123 是子查询的结果
    2021-07-13 16:37 
  • liu.yang liu.yang 回复 柒年呀(提问者) 第一种方法 把 id in replace(子查询SQL,\',\',\'\'\',\'\'\') 第二种 where 子查询结果 like \'%\'+id+\'%\'
    2021-07-13 16:42 
  • liu.yang liu.yang 回复 柒年呀(提问者) \\ 是网页带出来的 不需要
    2021-07-13 16:43 
  • liu.yang liu.yang 回复 柒年呀(提问者) 用 like 把 replace 那个不行
    2021-07-13 16:50 
  • 柒年呀 柒年呀(提问者) 回复 liu.yang like那个 不必报错但是 显示是空
    2021-07-13 16:51 
  • 3关注人数
  • 429浏览人数
  • 最后回答于:2022-1-15 00:14
    请选择关闭问题的原因
    确定 取消
    返回顶部