sql in 传值问题

--第一种查询方式(无结果)
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)

 

四季花海
浏览 485回答 6
6回答

FFIVE

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

largeQ

我也试过,要不你就试试在存储过程里面拼SQL试试。。。 我觉得原理应该是这样的,在sqlserver里面,一般生成的语句里面,表名,字段名等都是外面加了一个[] 所以我当时猜测,可能就是这个,所以你你第一个其实执行的是select top 10 * from TB1 where sn in(['0000YV00004','0001N70004W']),这是个人猜测。。。

万千封印

@顾晓北: 恩,刚开始没理解,现在理解了,谢谢你哈
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

SQL Server