我有一個Staging
表具有以下的列如何解析SQL表分成多個多到多個表
- VideoURL
- 評級
- 長度
- 縮略圖
- 標籤(逗號-delimited)
視頻有多對多的關係ip與標籤。我創建了以下新表:
- 視頻
- 標籤
- VideoTag
如何在臨時表中的數據解析成三個新的表?標籤表不應包含重複項。另外,在將數據插入新表之前,我需要對數據進行一些格式化,例如需要從長度列中去除所有字母。
我有一個Staging
表具有以下的列如何解析SQL表分成多個多到多個表
視頻有多對多的關係ip與標籤。我創建了以下新表:
如何在臨時表中的數據解析成三個新的表?標籤表不應包含重複項。另外,在將數據插入新表之前,我需要對數據進行一些格式化,例如需要從長度列中去除所有字母。
的兩端使用輔助號碼錶,可以將標籤欄分成數行,同時保持它與關聯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) = ','
了分割字符串使用中的數字表
我該怎麼做。
試試這個,假設videourl視頻名稱和splitstring功能返回表已經標記名列
create table video(...)
create table tag(...)
create table videotag(...)
insert video
select distinct(maintable.videourl) as videoname
from maintable
insert tag
select distinct(tag.tagname)
from maintable cross apply SplitString(maintable.tags,',') tag
insert videotag
select maintable.videourl as videoname,tag.tagname
from maintable cross apply SplitString(maintable.tags,',') tag
如果您自動生成的視頻和標籤表,然後
而IDS插入到videotag表中得到相關的自動生成的id從
它是主表。
Splitstring功能是從here
我很困惑,請澄清 - 這是純粹的SQL?在這種情況下,您應該刪除ef和c#標籤。 –
哎呀,忘記帶走了。實際上,我對SQL或實體框架解決方案感興趣,但EF最終無法接近直接SQL的性能。 – BrazenTongue