使用辅助数字表,您可以将标签列拆分为行,同时保持与 VideoURL 的关联:
CREATE TABLE NumberPivot (NumberID INT PRIMARY KEY)
DECLARE @intLoopCounter INT
SELECT @intLoopCounter =0
SET NOCOUNT ON
WHILE @intLoopCounter <=999 BEGIN
INSERT INTO NumberPivot
VALUES (@intLoopCounter)
SELECT @intLoopCounter = @intLoopCounter +1
END
GO
SELECT
ContentPageID,
Substring(',' + Tags + ','
, numberID + 1
, Charindex(',', ',' + Tags + ',', numberID + 1) - numberid - 1) AS value
FROM dbo.NumberPivot AS np,
Staging AS S
WHERE numberid <= Len(',' + Tags + ',') - 1
AND Substring(',' + Tags + ',', numberID, 1) = ','
所以这里我们用唯一的标签填充标签表:
;WITH X AS (
SELECT
VideoURL,
Substring(',' + Tags + ',', numberID + 1, Charindex(',', ',' + Tags + ',', numberID + 1) - numberid - 1) AS Tag
FROM dbo.NumberPivot AS np,
Staging AS S
WHERE numberid <= Len(',' + Tags + ',') - 1
AND Substring(',' + Tags + ',', numberID, 1) = ','
)
INSERT Tag (Tag)
SELECT DISTINCT Tag FROM X;
接下来填写视频表:
INSERT Video (VideoURL, Rating, Length, Thumbnail)
SELECT VideoURL, Rating, Length, Thumbnail
FROM Staging;
最后填充 VideoTag:
INSERT VideoTag (VideoURL, Tag)
SELECT
VideoURL,
Substring(',' + Tags + ',', numberID + 1, Charindex(',', ',' + Tags + ',', numberID + 1) - numberid - 1) AS Tag
FROM dbo.NumberPivot AS np,
Staging AS S
WHERE numberid <= Len(',' + Tags + ',') - 1
AND Substring(',' + Tags + ',', numberID, 1) = ','
使用来自here的数字表获取拆分字符串