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!

War es hilfreich?

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

Bearbeiten - Ich fand

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top