使用split函数插入数组的SQL

时间:2014-05-06 07:27:18

标签: sql-server sql-server-2008

我有split函数,它将从数组中删除分隔符并插入到表中,如

     insert into tbl_Temp (column) select Data from  dbo.split('1,2',',')

它会插入一切正常。现在我想将两个数组插入两列,如

     Insert into tbl_Temp(column1,column2) ___(i don't know what to write)___

使用dbo.split函数,以便相应的列值应按照相同的数组顺序插入column1,column2    (' 1,2',',')(' a',' b',',& #39)

我的Dbo.split是

       ALTER FUNCTION [dbo].[Split]  
       (  
       @RowData nvarchar(MAX),
       @SplitOn nvarchar(5)
       )    
      RETURNS @ReturnValue TABLE   
            (Data NVARCHAR(MAX))   
        AS
        BEGIN
        Declare @Counter int
        Set @Counter = 1 
        While (Charindex(@SplitOn,@RowData)>0) 
        Begin  
        Insert Into @ReturnValue (data)  
        Select Data = 
       ltrim(rtrim(Substring(@RowData,1,Charindex(@SplitOn,@RowData)-1)))
       Set @RowData = 
       Substring(@RowData,Charindex(@SplitOn,@RowData)+1,len(@RowData)) 
       Set @Counter = @Counter + 1  
       End 
       Insert Into @ReturnValue (data)  
       Select Data = ltrim(rtrim(@RowData))  
       Return  
    END

我不明白如何继续...... ??

1 个答案:

答案 0 :(得分:0)

我使用以下函数来分割逗号分隔数据:

create function dbo.SplitWithId (@RowData nvarchar(MAX), @SplitOn char)
returns table 
as
return 
(
    select substring(@RowData, n, charindex(@SplitOn, @RowData + @SplitOn, n) - n) as col,
    row_number() over (order by n) as id
    from numbers 
    where substring(@SplitOn + @RowData, n, 1) = @SplitOn
    and n < len(@RowData) + 1

)
go

这是一个内联表函数,因此它比多语句更快。它还返回id列和数据。您需要一个numbers表来使用它,但数字表在很多方面都很有用。

使用此功能后,您的插入内容将如下所示:

insert into tbl_Temp(column1,column2)
select f1.col, f2.col
from dbo.SplitWithId ('a,b,c,d', ',') f1
inner join dbo.SplitWithId ('e,f,g,h', ',') f2 on f1.id = f2.id