我想从使用两个不同文本分隔符的字符串中返回整个表。行用分号,列用逗号。表值函数可以做到这一点,但我太不了解如何解析然后将数据附加到预先存在的数据集中。
假设每一行的列数与其他行相同,我希望能够在数据集中容纳非固定数量的列。应该是数据在字符串中的顺序是列出来的顺序。希望这意味着将来对分隔的索引字符串具有广泛的适用性。
示例(为清楚起见添加了回车 - 这是一个字符串):
Master Section 1,Stuff 1,234345,3453453,23423423;
Master Section 1,Stuff 2,6786787,6576576,76577;
Master Section 2,Section 2 Stuff 1,898676,9870970,8708798
变成:
Column 1 Column 2 Column 3 Column 4 Column 5
--------- -------- -------- -------- --------
Master Section 1 Stuff 1 234345 3453453 23423423
Master Section 1 Stuff 2 678678 6576576 76577
Master Section 2 Stuff 3 898676 9870970 8708798
理想情况下,拆分函数可以容纳与数据集中的逗号一样多的列。
当前拆分字符串函数:
ALTER FUNCTION [dbo].[splitstring] ( @stringToSplit VARCHAR(MAX), @delimiter VARCHAR(1))
RETURNS
@returnList TABLE ([item] [nvarchar] (500), rn int)
AS
BEGIN
DECLARE @item NVARCHAR(255)
DECLARE @pos INT
Declare @rn int = 1
WHILE CHARINDEX(@delimiter, @stringToSplit) > 0
BEGIN
SELECT @pos = CHARINDEX(@delimiter, @stringToSplit)
SELECT @item = SUBSTRING(@stringToSplit, 1, @pos-1)
INSERT INTO @returnList (item, rn)
SELECT @item, @rn
SELECT @stringToSplit = SUBSTRING(@stringToSplit, @pos+1, LEN(@stringToSplit)-@pos)
SET @rn = @rn + 1
END
INSERT INTO @returnList (item, rn)
SELECT @stringToSplit, @rn
RETURN
END
我SplitString
现在正在使用以下 SQL 查询调用该函数。这仅基于单个分隔符进行拆分,并且仅返回单个列。
INSERT INTO dbo.tblRepeaterStage0(Item_Title, Section_Values)
SELECT s.Item_Title, s.Section_Values
FROM
(
SELECT d.Item_Title, d.Raw_Repeater,
c.item Section_Values, c.rn
FROM dbo.tblRawRepeater d
CROSS APPLY dbo.splitstring(d.Raw_Repeater, ';') c
) s
同样,我希望调整此函数以接受两个分隔符,然后使用这些分隔符拆分为行和列。然后需要将表值函数返回附加到预先存在的数据集。