为了账号安全,请及时绑定邮箱和手机立即绑定

sql in 传值问题

sql in 传值问题

四季花海 2018-12-06 14:07:22
--第一种查询方式(无结果)declare @sn varchar(900) set @sn='''0000YV00004'',''0001N70004W'''; --print @sn select top 10 * from TB1 where sn in(@sn)如上代码这样直接执行是查询不到任何结果的,我用打印参数@sn是显示'0000YV00004','0001N70004W'这种格式,应该可以直接在in里面查询啊!而用如下代码是可以 declare @sn varchar(900) set @sn='''0000YV00004'',''0001N70004W'''; --print @sn declare @sql varchar(2000) set @sql ='select top 10 * from TB1 where sn in('+@sn+')' exec(@sql) 请问为什么第一中sql不能查询出任何结果呢?谢谢 当@sn只是一个变量时第一种方式又可以查询出来 declare @sn varchar(900) set @sn='0000YV00004'; --print @sn select top 10 * from StoreLabelInfo where sn in(@sn)  
查看完整描述

6 回答

?
FFIVE

TA贡献1797条经验 获得超6个赞

di一种方式是将@sn 看作 一个变量, in ('1,2'),而你想要的结果是in(1,2)所以不同

查看完整回答
反对 回复 2019-01-07
?
largeQ

TA贡献2039条经验 获得超7个赞

我也试过,要不你就试试在存储过程里面拼SQL试试。。。

我觉得原理应该是这样的,在sqlserver里面,一般生成的语句里面,表名,字段名等都是外面加了一个[]

所以我当时猜测,可能就是这个,所以你你第一个其实执行的是select top 10 * from TB1 where sn in(['0000YV00004','0001N70004W']),这是个人猜测。。。

查看完整回答
反对 回复 2019-01-07
?
万千封印

TA贡献1891条经验 获得超3个赞

@顾晓北: 恩,刚开始没理解,现在理解了,谢谢你哈

查看完整回答
反对 回复 2019-01-07
  • 6 回答
  • 0 关注
  • 484 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信