首页 > 其他 > 详细

游标后面select 带有in时

时间:2014-11-19 20:23:34      阅读:205      评论:0      收藏:0      [点我收藏+]

今天遇到一个问题,使用游标时,在给游标填充值的时候,select  语句中带有 where查询条件,并且还有 in子句。

本来我是这样写的,试了很多次都不出结果,当然number in (304010,305013)是可以出结果的。

declare @Did varchar(10)
declare @zdcode varchar(50) set @zdcode=304010,305013
declare cur_id cursor for select Number from dbo.IM_Metadata where number in (@zdcode) 
open cur_id 
fetch next from cur_id into @Did
while @@fetch_status=0    
 begin  
print @Did
fetch next from cur_id into @Did
end
close cur_id
 deallocate cur_id


后来一番折腾,求助了群里同志们

果然有了不错的解决方案

就是添加一个函数:

CREATE   FUNCTION [dbo].[f_split]  
(  
@c VARCHAR(MAX) ,  
@split VARCHAR(50)  
)  
RETURNS @t TABLE ( col VARCHAR(50) )  
AS  
BEGIN  
    WHILE ( CHARINDEX(@split, @c) <> 0 )  
        BEGIN  
            INSERT  @t( col )  
            VALUES  ( SUBSTRING(@c, 1, CHARINDEX(@split, @c) - 1) )  
            SET @c = STUFF(@c, 1, CHARINDEX(@split, @c), ‘‘)  
        END  
    INSERT  @t( col ) VALUES  ( @c )  
    RETURN  
END  

然后使用时这样:

declare cur_id cursor for select Number from dbo.IM_Metadata where number in (select * from f_split(@zdcode , ,)) 

ok问题解决了。

 

游标后面select 带有in时

原文:http://www.cnblogs.com/agile2011/p/4108926.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!