Effizienter Weg, um string-split mit CTE
Ich habe eine Tabelle, die so aussieht wie
ID Layout
1 hello,world,welcome,to,tsql
2 welcome,to,stackoverflow
Die gewünschte Ausgabe sollte
Id Splitdata
1 hello
1 world
1 welcome
1 to
1 tsql
2 welcome
2 to
2 stackoverflow
Habe ich dies getan, indem Sie die folgenden Abfrage
Declare @t TABLE(
ID INT IDENTITY PRIMARY KEY,
Layout VARCHAR(MAX)
)
INSERT INTO @t(Layout)
SELECT 'hello,world,welcome,to,tsql' union all
SELECT 'welcome,to,stackoverflow'
--SELECT * FROM @t
;With cte AS(
select F1.id
,O.splitdata
from
(
select *,
cast('<X>'+replace(F.Layout,',','</X><X>')+'</X>' as XML) as xmlfilter
from @t F
)F1
cross apply
(
select fdata.D.value('.','varchar(MAX)') as splitdata
from f1.xmlfilter.nodes('X') as fdata(D)) O
)
select * from cte
Aber Leistung klug, es ist sehr schlecht. Ich bin auf der Suche nach einer effizienteren Abfrage aber mit CTE nur.
Bitte helfen
Dank
Versuchen Sie die proc in [ diesem Beitrag](wisesoft.co.uk/scripts/t-sql_cte_split_string_function.aspx), wo Sie die Rekursion zu trennen. Ich denke, man kann es anpassen. Dieser verwendet einen Allgemeinen Tabellenausdruck.
während ich mit Ihnen überein es gibt manchmal gute Gründe, zu wissen, wie man diese effizient. Speziell schrubben schlecht Daten kommen aus einem integrierten system, wo müssen Sie führen die routine, als einen job auf einem regelmäßigen Zyklus. Ich denke, die Antwort wird aufschlussreich und hilfreich für andere.
Einverstanden, und mein Kommentar hat einige übertreibung in der it. Deshalb ist es ein Kommentar, und keine Antwort. Aber ich denke auch, es ist wichtig, dass die Ankündigung gut platziert und gut gestimmt, für die unvorsichtigen.
Ich kann nicht behaupten, dass mit. Ich kann auch nicht behaupten, mit CSV=666!
Wie funktioniert mit einem CTE-T-SQL besser zu string Parsen?
während ich mit Ihnen überein es gibt manchmal gute Gründe, zu wissen, wie man diese effizient. Speziell schrubben schlecht Daten kommen aus einem integrierten system, wo müssen Sie führen die routine, als einen job auf einem regelmäßigen Zyklus. Ich denke, die Antwort wird aufschlussreich und hilfreich für andere.
Einverstanden, und mein Kommentar hat einige übertreibung in der it. Deshalb ist es ein Kommentar, und keine Antwort. Aber ich denke auch, es ist wichtig, dass die Ankündigung gut platziert und gut gestimmt, für die unvorsichtigen.
Ich kann nicht behaupten, dass mit. Ich kann auch nicht behaupten, mit CSV=666!
Wie funktioniert mit einem CTE-T-SQL besser zu string Parsen?
InformationsquelleAutor aditi | 2011-06-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Scheinen Sie tot-set auf mit einem CTE, so versuchen Sie dies:
AUSGABE:
hier ist ein ausgezeichneter Artikel über die Aufteilung von Zeichenfolgen in SQL Server: "Arrays und Listen im SQL Server 2005 und darüber Hinaus, Wenn die Tabelle den Value-Parameter Nicht Schneiden Sie es" von Erland Sommarskog
BEARBEITEN hier ist eine andere version (aber Sie müssen eine zahlen-Tabelle) liefert dieselben Ergebnisse wie oben:
siehe hier für eine zahlen-Tabelle: Was ist der beste Weg zum erstellen und Auffüllen einer zahlen-Tabelle?
InformationsquelleAutor KM.
es ist meine beste Lösung mit der CTE:
InformationsquelleAutor Wesley Salmi
Vom NullRef Antwort
Funktion ohne set-operation wird schneller sein, nach meinem Verständnis von sql server
so wird dies sehr effizient
InformationsquelleAutor Arun Prasad E S