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

在用select...where XXX in(变量),时遇到郁闷的问题?_?
各位高手,小弟我遇到如下问题    
 
DECLARE     @a     varchar(200)        
SET     @a= ' ' 'zidane1 ' '     ,         ' 'zedane2 ' ' '    
 
select     @a     as     '@a '    
 
select     NextUser     from     dbo.Spreader_List_Relation     where     Username     in     (@a)    

--但如下直接使用又能检索出数据来
--select     NextUser     from     dbo.Spreader_List_Relation     where     Username     in     ( 'zidane1 ', 'zedane2 ')
go        
 
在数据库中有这些相关的数据,但为何用变量后就没检索出数据呢?    
但如果SET     @a= 'zidane1 '(单个的)这样又能检索出数据来?这该如何解决呢??_?    
请帮帮我

------解决方案--------------------
@a在查询语句中只是一个字符串,根本不是你想要得到的两个一逗号分隔开的字符串

程序可以这样写

DECLARE @a varchar(200)
DECLARE @sql varchar(4000)

SET @a= ' ' 'zidane1 ' ' , ' 'zedane2 ' ' '

select @a as '@a '

set @sql = 'select NextUser from dbo.Spreader_List_Relation where Username in ( '+@a+ ') '

exec(@sql)


------解决方案--------------------
用动态SQL即可。

DECLARE @a varchar(200)
SET @a= ' ' 'zidane1 ' ' , ' 'zedane2 ' ' '

select @a as '@a '

exec ( 'select NextUser from dbo.Spreader_List_Relation where Username in ( ' + @a + ') '
------解决方案--------------------
--try


DECLARE @a varchar(200)
SET @a= ' ' 'zidane1 ' ' , ' 'zedane2 ' ' '

select @a as '@a '

exec( 'select NextUser from dbo.Spreader_List_Relation where Username in ( '+@a+ ') ')