标签:
越来越发现自己的sql方面的知识的欠缺,所以只能放低姿态一点一点的学了
一 游标和charIndex的使用。
游标我一直没用过,以前只是在同事们写的存储过程里见过,但是一直没看明白(可是我就是比较笨吧)。今天在写一个东西的时候用到了需要用到游标来处理,于是我就先比葫芦画瓢的写了一个,供以后参考吧。
1 declare @t table(id int,value varchar(100)) 2 3 declare my_cursor cursor local FOR 4 SELECT * FROM (SELECT AnsID, AnsTitle FROM dbo.Answers WHERE charindex(‘,‘+CONVERT(NVARCHAR(20),AnsID)+‘,‘,‘,‘+@qusid+‘,‘) > 1) AS tb 5 declare @id_old int , @id int , @value varchar(10) , @s varchar(100) 6 open my_cursor 7 fetch my_cursor into @id , @value 8 select @id_old = @id , @s=‘‘ 9 while @@FETCH_STATUS = 0 10 begin 11 if @id = @id_old 12 select @s = @s + ‘,‘ + cast(@value as varchar) 13 else 14 begin 15 insert @t values(@id_old , stuff(@s,1,1,‘‘)) 16 select @s = ‘,‘ + cast(@value as varchar) , @id_old = @id 17 end 18 fetch my_cursor into @id , @value 19 END 20 insert @t values(@id_old , stuff(@s,1,1,‘‘)) 21 close my_cursor 22 deallocate my_cursor 23 24 SELECT @t
charIndex的使用呢其实是我这有这样的一个 int类型的ID判断在类似‘1,2,3...’中就一直再报无法将varchar转换为int类型,我刚开始的时候思路一直是把后者转换为int类型, 但是又觉得似乎走不通,然后我就问了下度娘,在网上看有位前辈说用charIndex(),我就说试一下,这个直到我自己在编辑器里敲出来,才明白过来这个和我的思路正好相反,这个是把只有一个值的int 类型转换成了varchar类型,然后再使用charIndex()来判断是否包含,这样来说就可以要到我要的效果。这个事情除了明白了认识了charindex()的使用,还让我觉得,有时候也许换一条思路就可以做到自己想做的事情,要灵活的去运用sql的函数和编程中的思想。
二 stuff()方法
stuff(@s,1,1,‘‘)这个方法的使用也要多去学习理解一下。
标签:
原文地址:http://www.cnblogs.com/qzzy/p/4557059.html