日期:2014-05-18  浏览次数:20496 次

in 的问题
写了个自定义函数,把一个表的主键   连接成一个字符串!

然后利用   select   *   from   songs   where   cast(s_id   as   varchar)   in   (dbo.GetSongsIDS(56))

dbo.GetSongsIDS(56)   得到了一个串,比如:156,165,145,158

但是上面的   select     语句却查不到数据~~

为什么呢?


而   select   *   from   songs   where   cast(s_id   as   varchar)   in   (156,165,145,158)

有数据!什么原因呢?




------解决方案--------------------
select * from songs where cast(s_id as varchar) in (156,165,145,158)

不等于

select * from songs where cast(s_id as varchar) in ( '156,165,145,158 ')


你可以这样写:
select * from songs where charindex( ', '+cast(s_id as varchar)+ ', ' , ', ' + dbo.GetSongsIDS(56) + ', ')
------解决方案--------------------
LS解释正确,你的函数得到的是一个字符串,in这个字符串相当于就是和这个字符串的整体比较,不会再按照你理解的分隔匹配了。

可以采用LS的方式在SQL里拆分这个字符串比较
------解决方案--------------------
呵呵,不能算拆分。说是构造比较吧

select * from songs where charindex( ', '+cast(s_id as varchar)+ ', ' , ', ' + dbo.GetSongsIDS(56) + ', ')> 0
------解决方案--------------------
因为你得到的是一个字符串,而不是一组
------解决方案--------------------
用charindex()

select * from songs where charindex( ', '+cast(s_id as varchar)+ ', ' , ', ' + dbo.GetSongsIDS(56) + ', ')> 0