AOL's Web Log

Life is like a box of chocolate , you never know what you gonna get .

原创 transact-sql数组 收藏

新一篇: Effective C++ 学习笔记 | 旧一篇: ADO访问Oracle结果集的心得

前两周做一个统计任务, 需要在sql server里用到数组这样的数据结构.而transact-sql没有内建数组,听说可以用字符串配合临时表来实现,自己试了,解决方法如下 :

create proc [dbo].[CreateArray]
@string varchar(1024)
as
create table #array (id int identity,value varchar(32))
set @string='insert #array select '''+replace(@string,',','''as str union all select ''')+''''
exec(@string)
select * from #array

go

执行如下 :

exec CreateArray 'CChess,Dig,GoBang,LandLord,Majiang'


发表于 @ 2006年01月03日 16:47:00|评论(loading...)|编辑

新一篇: Effective C++ 学习笔记 | 旧一篇: ADO访问Oracle结果集的心得

评论

#baggio785 发表于2006-01-08 23:31:00  IP: 220.191.40.*
还应该加上一句
drop
#AOL 发表于2006-01-16 17:39:00  IP: 61.145.129.*
是个临时表
#ffs 发表于2006-01-19 16:38:00  IP: 58.63.38.*
你好,这个的确很有用,不过不是太明白set @string='insert #array select '''+replace(@string,',','''as str union all select ''')+''''
这句的意思,将一个插入临时表的操作保存到一个变量中?这个'insert #array select '''+replace(@string,',','''as str union all select ''')+''''应该是当作字符串的形式放到@string 变量中吧? 但是中间的replace 这个@string 的内容是什么意思呢?
根据你的这种方法在最后使用select * from #array 查出来的怎会是exec CreateArray 'CChess,Dig,GoBang,LandLord,Majiang' 呢?
我试过,查出来的是象普通select * 语句查出来的样子。请指点一二.
#AOL 发表于2006-01-19 17:39:00  IP: 219.133.168.*
replace就是把CChess,Dig,GoBang,LandLord,Majiang中的 , 号,换成 as str union all select
发表评论  


当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
Csdn Blog version 3.1a
Copyright © AOL