首页 新闻 搜索 专区 学院

sql in 传值问题

0
悬赏园豆:5 [已解决问题] 解决于 2015-11-24 11:56
--第一种查询方式(无结果)
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)

 

xiaoqiangzhou的主页 xiaoqiangzhou | 初学一级 | 园豆:83
提问于:2015-11-23 17:32
< >
分享
最佳答案
0

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

收获园豆:2
悦光阴 | 老鸟四级 |园豆:2251 | 2015-11-24 11:38
其他回答(1)
0

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

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

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

收获园豆:1
顾晓北 | 园豆:10792 (专家六级) | 2015-11-23 17:57
貌似不是这样呢,我在代码中直接用拼接的参数传入到sql查询语句中,是可以直接返回结果的
string
listSn = ""; foreach (KeyValuePair<string, List<string>> de in DicSNInfo) { #region //遍历每个sn sn = de.Key.ToString(); //拼接sn以便直接在sql语句查询 listSn += "'" + sn + "',"; #endregion } if (listSn.IndexOf(",") > 0) { listSn = listSn.TrimEnd(','); //此处将listSn 直接传给一个sql查询语句是可以的。例如 string sqlStr="select * from tab1 where conditions in("+listSn +")" //这样的语句是可以执行的 }

 

支持(0) 反对(0) xiaoqiangzhou | 园豆:83 (初学一级) | 2015-11-23 18:10

@xiaoqiangzhou: 我当然知道可以。。。

支持(0) 反对(0) 顾晓北 | 园豆:10792 (专家六级) | 2015-11-24 08:31

@xiaoqiangzhou: 你的那个最佳答案跟我说的一个意思。。。

支持(0) 反对(0) 顾晓北 | 园豆:10792 (专家六级) | 2015-11-24 13:20

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

支持(0) 反对(0) xiaoqiangzhou | 园豆:83 (初学一级) | 2015-11-24 14:44
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册