zoukankan      html  css  js  c++  java
  • sql server 2005 分别用值函数和存储过程拆分字符串成列

    Create PROCEDURE [dbo].[label_Add_Bat] 
    @labels NVARCHAR(400-- eg:N'asd,ad,asdoashdo,12313j1,asdasda,asdasd,'
    AS
    BEGIN

        
    DECLARE @temp TABLE (col NVARCHAR(100))    
        
    DECLARE @tlabel NVARCHAR(100

        
    INSERT INTO @temp SELECT col FROM split(@labels,N','

        
    declare   cur_temp   cursor   KEYSET   
        
    for   
        
    select   col   from  @temp 
          
        
    open   cur_temp   

        
    FETCH   NEXT   FROM   cur_temp   INTO   @tlabel  
         
        
    while (@@FETCH_STATUS=0)   
        
    begin   
             
    IF(EXISTS(SELECT label_Id FROM label WHERE label_Caption=@tlabel))
                
    BEGIN
                     
    UPDATE label SET label_Num = label_Num + 1 WHERE label_Caption=@tlabel
                
    END
             
    ELSE
                 
    BEGIN
                     
    INSERT INTO [label] ([label_Caption]VALUES (@tlabel)
                 
    END
            
    FETCH   NEXT   FROM   cur_temp   INTO   @tlabel  
        
    end   
        
        
    close   cur_temp   
        
        
    DEALLOCATE   cur_temp   
    END

    表值函数split:

    CREATE function [dbo].[split](@c varchar(max),@split varchar(2)) 
    returns @t table(col varchar(20)) 
    as 
    BEGIN
        
    DECLARE @item NVARCHAR(20)
        
        
    --params
        while(charindex(@split,@c)>0
        
    begin 
            
    SET @item=substring(@c,1,charindex(@split,@c)-1)
            
            
    /*check is empty*/
            
    IF(RTRIM(LTRIM(@item))!='')
            
    BEGIN
                
    insert @t(col) values (@item)              
            
    END
            
            
    set @c = stuff(@c,1,charindex(@split,@c),'')        
        
    end 
        
        
    --one param    
        IF(RTRIM(LTRIM(@c))!='')
        
    BEGIN
            
    insert @t(col) values (@c
        
    END
        
        
        
    return 
    end 

    --------------------------------------------------------------------------
    Daniel Chow's Blog - 不管你在哪里,都要有一颗创业的心!
    http://www.cnblogs.com/DanielChow/
  • 相关阅读:
    HDU 2201 熊猫阿波问题==金刚坐飞机问题
    HDU 2100 (模拟进制加法)
    HDU 2151 Worm
    qsort快速排序
    HDU 1007 (最近点对+qsort对结构体的排序!!!)
    HDU 1348 wall (简单凸包)
    HDU 1392 Surround the Trees(凸包模板)
    HDU 1431素数回文
    HDU 2108 Shape of HDU(判断拐点)
    HDU 2857 Mirror and Light(镜面反射模板)
  • 原文地址:https://www.cnblogs.com/DanielChow/p/1645051.html
Copyright © 2011-2022 走看看