T-SQL-Split-String in viele-zu-eins-Beziehung?
-
11-09-2019 - |
Frage
Ich habe den folgenden SQL-Skript:
DECLARE @temp table (
ID int IDENTITY(1, 1),
data nvarchar(100)
)
INSERT INTO @temp (data) VALUES ('a,b,c')
INSERT INTO @temp (data) VALUES ('d,e,f')
SELECT *
FROM @temp AS T
INNER JOIN
(SELECT *
FROM dbo.__StringSplit(T.data, ',', T.ID)) AS S
ON T.ID = S.RefID
! Und nach dem Klicken auf Ausführen, bekam ich diese:
Line 17 The multi-part identifier "T.data" could not be bound.
Ich habe versucht, auch die Nicht-Join-Version und bekam den gleichen Fehler:
SELECT T.ID, S.Item AS dataItem
FROM @temp AS T, dbo.__StringSplit(T.data, ',', T.ID) AS S
WHERE T.ID = S.RefID
...
Was ich erwartet hatte war, dass ich sollte einen Tisch bekommt mit IDs aus Richtung @ test.ID und jeweils durch Komma getrennte Werte in @ test.data wird in seinen eigenen Aufzeichnungen und seinen Wert setzen in das dataItem Feld aufgespalten .
Wie kann ich erreichen, dass?
Muss ich Cursor verwenden?
Ich habe die dbo .__ Stringtabellenwert-Funktion Implementierung unter http://pastebin.com/f7dd6350f
Danke!
Lösung
In SQL2000 müssen Sie Cursor. In SQL2005 / 2008, können Sie CROSS satement GILT; wahrscheinlich wie weiter (nicht nur jetzt testen):
SELECT T.ID, S.Item AS dataItem
FROM @temp AS T CROSS APPLY dbo.__StringSplit(T.data, ',', T.ID) AS S
Andere Tipps
Ihre Split-String-Funktion ist wirklich langsam, hier ist ein Link zu machen viel schneller ein: