我有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
我不明白如何继续...... ??
答案 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