Ähnlich wie die xml-basierte Antwort von josejuan habe ich festgestellt, dass die Verarbeitung des XML-Pfads nur einmal und dann das Pivoting etwas effizienter war:
select ID,
[3] as PathProvidingID,
[4] as PathProvider,
[5] as ComponentProvidingID,
[6] as ComponentProviding,
[7] as InputRecievingID,
[8] as InputRecieving,
[9] as RowsPassed,
[10] as InputRecieving2
from
(
select id,message,d.* from sysssislog cross apply (
SELECT Item = y.i.value('(./text())[1]', 'varchar(200)'),
row_number() over(order by y.i) as rn
FROM
(
SELECT x = CONVERT(XML, '' + REPLACE(Message, ':', '') + '').query('.')
) AS a CROSS APPLY x.nodes('i') AS y(i)
) d
WHERE event
=
'OnPipelineRowsSent'
) as tokens
pivot
( max(item) for [rn] in ([3],[4],[5],[6],[7],[8],[9],[10])
) as data
lief in 8:30
select id,
tokens.value('(/n[3])', 'varchar(100)')as PathProvidingID,
tokens.value('(/n[4])', 'varchar(100)') as PathProvider,
tokens.value('(/n[5])', 'varchar(100)') as ComponentProvidingID,
tokens.value('(/n[6])', 'varchar(100)') as ComponentProviding,
tokens.value('(/n[7])', 'varchar(100)') as InputRecievingID,
tokens.value('(/n[8])', 'varchar(100)') as InputRecieving,
tokens.value('(/n[9])', 'varchar(100)') as RowsPassed
from
(
select id, Convert(xml,''+Replace(message,'.','')+'') tokens
from sysssislog
WHERE event
=
'OnPipelineRowsSent'
) as data
lief in 9:20
3 Stimmen
Siehe stackoverflow.com/questions/314824/… ebenfalls
5 Stimmen
Die höchsten Antworten hier sind - zumindest für mich - ziemlich altmodisch und eher veraltet. Prozedurale Logik, Schleifen, Rekursionen, CLR, Funktionen, viele Codezeilen... Es könnte interessant sein, die "aktiven" Antworten zu lesen, um aktuellere Ansätze zu finden.
0 Stimmen
Ich habe eine neue Antwort mit einem aktuelleren Ansatz hinzugefügt: stackoverflow.com/a/49669994/632604
0 Stimmen
Versuchen Sie Holen Sie sich das n-te Element einer Liste -> portosql.wordpress.com/2019/05/27/enesimo-elemento-lista
0 Stimmen
Einige Kommentare (einschließlich eines von mir) wurden gelöscht. Möchte sich einer der Moderatoren äußern?
1 Stimmen
@TimAbell, die Dokumentation besagt, dass "Die Reihenfolge entspricht möglicherweise nicht der Reihenfolge der Teilzeichenfolgen im Eingabestring".
0 Stimmen
@TimAbell Ja, ja... aber wie erhält man ein EINZELNES Ergebnis nach Index aus dem Ergebnis von
STRING_SPLIT
???0 Stimmen
Bis zur SQL Server 2022 ist die zuverlässigste Lösung
string_split
mit Ordinal. Siehe stackoverflow.com/a/70196925/87015