今天在工作遇到了一个问题,需要往表中添加数量不小而且没有规律的的数据。思考后我想到了使用高级语言中的数组功能解决。
由于SQL Server并没有数组类型,ANSI SQL-92标准中并没有任何有关数组方面的定义。要实现其他高级语言中的数组功能,我们必须使用一些特殊的处理方法,其中包括特殊设计的字符参数、临时表、XML等。
我想到的是用特殊字符分割提取的方法:
用VARCHAR数据类型来模拟一个数组,数组中元素用逗号隔开,接着通过WHILE循环使用CHARINDEX以及SUBSTRING函数来提取其中的元素。
实例代码如下:
create proc insertUsers_of_array (@Namelist varchar(1000)) as declare @ix int,@pos int,@str varchar(1000) set @pos=1 set @ix=1 while @ix>0 begin set @ix=charindex(',',@List,@pos) if @ix>0 set @str=substring(@list,@pos,@ix-@pos) else set @str=substring(@list,@pos,len(@list)) set @str=ltrim(rtrim(@str)) insertinto [dbo].[userlist] values(@str,1,'Xiaoming',GETDATE(),'Xiaoming',GETDATE()) set @pos=@ix+1 end
该示例代码可以插入没有规律的名字的数据集,调用方式为:
exec insertUsers_of_array@list='Mi,Meizu,Oppo,Huawei,ZTZ,PPK'
结果如下: