Ich bin bulk Einfügen einer CSV-Datei in SQL Server 2012. Die Daten sind derzeit |
Pipe als eine lange Zeichenfolge für jede Zeile getrennt. Ich möchte die Daten in die verschiedenen Spalten an jeder Pipe trennen.SQL - Separate Zeichenfolge in Spalten
Hier ist, wie die Daten sieht aus, als seine importiert:
ID|ID2|Person|Person2|City|State
"1"|"ABC"|"Joe"|"Ben"|"Boston"|"MA"
"2"|"ABD"|"Jack"|"Tim"|"Nashua"|"NH"
"3"|"ADC"|"John"|"Mark"|"Hartford"|"CT"
Ich würde liek die Daten in den Spalten an jedem Rohr zu trennen:
ID ID2 Person Person2 City State
1 ABC Joe Ben Boston MA
2 ABD Jack Tim Nashua NH
3 AFC John Mark Hartford CT
ich es schwierig zu finden bin zu Verwenden Sie charindex and substring functions
wegen der Anzahl der Spalten der Daten auch ich habe versucht, ParseName
zu verwenden, da das eine 2012-Funktion ist, aber das funktioniert nicht, da alle Spalten als NULL mit ParseName
Die Datei enthält etwa 300k Zeilen und ich habe eine Lösung mit XMLName gefunden, aber es ist sehr langsam. dh: dauert eine Minute, um die Daten zu trennen.
Hier ist die langsame xml Lösung:
CREATE TABLE #tbl(iddata varchar(200))
DECLARE @i int = 0
WHILE @i < 100000
BEGIN
SET @i = @i + 1
INSERT INTO #tbl(iddata)
SELECT '"1"|"ABC"|"Joe"|"Ben"|"Boston"|"MA"'
UNION ALL
SELECT '"2"|"ABD"|"Jack"|"Tim"|"Nashua"|"NH"'
UNION ALL
SELECT '"3"|"AFC"|"John"|"Mark"|"Hartford"|"CT"'
END
;WITH XMLData
AS
(
SELECT idData,
CONVERT(XML,'<IDs><id>'
+ REPLACE(iddata,'|', '</id><id>') + '</id></IDs>') AS xmlname
FROM (
SELECT REPLACE(iddata,'"','') as iddata
FROM #tbl
)x
)
SELECT xmlname.value('/IDs[1]/id[1]','varchar(100)') AS ID,
xmlname.value('/IDs[1]/id[2]','varchar(100)') AS ID2,
xmlname.value('/IDs[1]/id[3]','varchar(100)') AS Person,
xmlname.value('/IDs[1]/id[4]','varchar(100)') AS Person2,
xmlname.value('/IDs[1]/id[5]','varchar(100)') AS City,
xmlname.value('/IDs[1]/id[6]','varchar(100)') AS State
FROM XMLData
Diese Fragen enthält alles, was eine gute Frage braucht: copy'n'pasteable Testdaten, Eingabe, erwartete Ausgabe, eigener Versuch und eine klare Frage. Upvote von meiner Seite – Shnugo