zoukankan      html  css  js  c++  java
  • 用存储过程实现获取字符串中的数据添加到列中

    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
  • 相关阅读:
    第四次作业—四则运算
    第四次作业—代码规范
    【欢迎来怼】事后诸葛亮会议
    软件工程——第七次作业
    第17次Scrum会议(10/29)【欢迎来怼】
    软件工程——第六次作业
    第10次Scrum会议(10/22)【欢迎来怼】
    软件工程——第五次作业
    欢迎来怼——第四次Scrum会议
    软件工程——第四次作业(3)
  • 原文地址:https://www.cnblogs.com/ang-664455/p/7118571.html
Copyright © 2011-2022 走看看