zoukankan      html  css  js  c++  java
  • 字符串以;隔开转化为表

    create PROCEDURE [dbo].[P_公共_单列值转多行]

    @tb_from nvarchar(255),   --源表
    @tb_to nvarchar(255),   --临时存放表,临时表和源表都要有以下两个字段:主字段,分列段
    @zhu_lie nvarchar(255),   --主字段名,如ID,
    @feng_lie nvarchar(255)   --要分列的列名,如“姓名”


    AS
    BEGIN
    SET NOCOUNT ON;
        declare @zhu_value nvarchar(255)  --主列数值
        declare @feng_value nvarchar(500)  --分列数值
        declare @sql nvarchar(500)  --sql语句
        declare @weizhi1 as integer --记录第一个分号位置
        declare @weizhi2 as integer --记录第二个分号位置


    exec ('declare mycursor cursor for (select ' + @zhu_lie + ',  '+ @feng_lie +' from ' + @tb_from + ')')
    open mycursor
    fetch next from mycursor into @zhu_value,@feng_value


    while @@fetch_status = 0
      begin
       set @weizhi1 = 1
       set @weizhi2 = 1


       while @weizhi2 > 0
        begin
         set @weizhi2 = charindex(';',@feng_value,@weizhi1)
         set @sql = ''
         if @weizhi2 =0
          begin
           set @sql = 'insert into '+@tb_to+'('+@zhu_lie+','+@feng_lie +') values ('''+@zhu_value+''' ,'''+substring(@feng_value,@weizhi1,len(@feng_value))+''')'
           exec(@sql)
          end
         else
          begin
    set @sql = 'insert into '+@tb_to+'('+@zhu_lie+','+@feng_lie +') values ('''+@zhu_value+''' ,'''+substring(@feng_value,@weizhi1,@weizhi2-@weizhi1)+''')'
           exec(@sql)
           set @weizhi1= @weizhi2 + 1
          end
        end
       fetch next from mycursor into @zhu_value,@feng_value
      end


    close mycursor
    deallocate mycursor

    END

  • 相关阅读:
    变量的创建和初始化
    HDU 1114 Piggy-Bank (dp)
    HDU 1421 搬寝室 (dp)
    HDU 2059 龟兔赛跑 (dp)
    HDU 2571 命运 (dp)
    HDU 1574 RP问题 (dp)
    HDU 2577 How to Type (字符串处理)
    HDU 1422 重温世界杯 (dp)
    HDU 2191 珍惜现在,感恩生活 (dp)
    HH实习 acm算法部 1689
  • 原文地址:https://www.cnblogs.com/qzfitsoft/p/2875815.html
Copyright © 2011-2022 走看看