2 つの異なるテキスト区切り文字を使用する文字列からテーブル全体を返したいと思います。行はセミコロン、列はカンマ。テーブル値関数でこれを行うことができますが、データを解析して既存のデータセットに追加する方法を理解するにはあまりにも未熟です。
各行が他の行と同じ数の列を持っていると仮定して、データセット内の固定されていない数の列に対応できるようにしたいと考えています。データが文字列内にある順序は、列が出てくる順序である必要があります。願わくば、これが将来、区切られたインデックス付き文字列に幅広く適用できることを意味することを願っています。
例 (わかりやすくするためにキャリッジ リターンを追加 - これは単一の文字列です):
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
現在、次の SQL クエリを使用して関数を呼び出していSplitString
ます。これは、単一の区切り記号に基づいてのみ分割され、単一の列のみが返されます。
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
繰り返しますが、この関数を 2 つの区切り記号を受け入れるように適応させ、それらの区切り記号を使用して行と列に分割したいと考えています。次に、テーブル値関数の戻り値を既存のデータ セットに追加する必要があります。