用存储过程实现获取字符串中的数据添加到列中

create table goods
(
gid int identity(1,1) not null primary key,
gname nvarchar(20)
)
go


alter proc splitstring
@goodlist varchar(1000),   ----字符串
@spilststring varchar(10)=','  ----分割符
as
begin
    declare @end int,@start int,@values char(20)    ----@end 分割符位置,@start开始截取位置,@values截取的信息
    set @start=1
    set @end=charindex(@spilststring,@goodlist,@start)   ----获得分割符的位置
    while(@start<len(@goodlist))
    begin
    if(@end=0)                     ----当字符串最后没有分割符时,@end为0
        set @end=len(@goodlist)+1
    set @values=SUBSTRING(@goodlist,@start,@end-@start)    ----截取字符
    insert into goods(gname) values(@values)
    set @start=@end+1
    set @end=charindex(@spilststring,@goodlist,@start)
    end

end

exec splitstring @goodList='苹果,香蕉,草莓,西瓜'

select * from goods

 

 

or

分解多个字符串

分隔字符串存储过程 CutString
create proc CutString (@sourcestring varchar(100) output,   ----输入的字符串
                       @outstring varchar(10) output)       ----输出的字符串
as
declare @position int 
set     @position = charindex(',',@sourcestring)            ----分割符的位置
if (@position = 0)                                          ----说明后面没有数据了,这是最后一个
  begin
     set @outstring = @sourcestring
     set @sourcestring = null
  end
else
  begin
     set @outstring = substring(@sourcestring,1,@position-1)
     set @sourcestring = substring(@sourcestring,@position+1,(len(@sourcestring)-@position))
  end

ps:截取字符串‘aa,bb,cc,dd’
  第一次: 截取字符串‘aa,bb,cc,dd’ 输出 aa
  第二次: 截取字符串‘bb,cc,dd’ 输出 bb
  第三次: 截取字符串'cc,dd' 输出 cc
  第四次: 截取字符串‘dd’ 输出 dd

使用上面的方法:

 

将多个字符串添加到表中

 

order表:

orderid(订购id)     
customerid(顾客id)
employeeid(服务员id)
Order Details表:
customerid(顾客id)
productid(编号)
unitprice(单价)
quantity(数量)
discount(折扣)
Create proc SubmitOrder (
          @customerid    varchar(5),      @employeeid    int,      @productidlist varchar(100),       @unitpricelist varchar(100),
          @quantitylist  varchar(100),
          @discountlist  varchar(100))
as
set xact_abort on        --开启自动事务会滚,出任何错误都自动回滚
   declare @orderid int
   declare @productid varchar(20)
   declare @unitprice varchar(20)
   declare @quantity  varchar(20)
   declare @discount  varchar(20)
   begin transaction    --使用事务来执行
     insert into Orders(CustomerID,EmployeeID) values(@customerid,@employeeid)
     --select top 1 OrderID from Orders order by OrderID desc
     select @orderid = @@identity          --@@identity取得刚刚完成插入的全局自动增长列的值

     while (  @productidlist is not null )
        begin
           exec  CutString @productidlist output,@productid output
           exec  CutString @unitpricelist output,@unitprice output
           exec  CutString @quantitylist  output,@quantity  output
           exec  CutString @discountlist  output,@discount  output
           insert into [Order Details] values(
                        @orderid,
                        convert(int,@productid),
                        convert(money,@unitprice),
                        convert(int,@quantity),
                        convert(real,@discount))
           --delete
        end
    Commit transaction

 

posted @ 2017-07-04 21:18  令狐不要葱  阅读(989)  评论(0编辑  收藏  举报