Question

Je le script SQL suivant:

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
!

Et après avoir cliqué sur Exécuter, je suis arrivé ces:

Line 17 The multi-part identifier "T.data" could not be bound.

J'ai aussi essayé la version non-join et a obtenu la même erreur:

SELECT T.ID, S.Item AS dataItem
FROM @temp AS T, dbo.__StringSplit(T.data, ',', T.ID) AS S
WHERE T.ID = S.RefID

...

Ce que je pensais était que j'obtient une table avec les ID provenant de @ test.ID et chacune des valeurs séparées par des virgules dans @ test.data obtient divisé en ses propres dossiers et sa valeur mettre dans le champ DataItem .

Comment puis-je accomplir cela?
Suis-je obligé d'utiliser les curseurs?

J'ai collé le dbo .__ StringSplit de mise en œuvre fonction de table d'une valeur de http://pastebin.com/f7dd6350f

Merci!

Était-ce utile?

La solution

Dans SQL2000 vous avez besoin des curseurs. En SQL2005 / 2008, vous pouvez utiliser CROSS APPLY satement; probablement comme à côté (ne peut pas tester tout à l'heure):

SELECT T.ID, S.Item AS dataItem
FROM @temp AS T CROSS APPLY dbo.__StringSplit(T.data, ',', T.ID) AS S

EDIT - J'ai trouvé

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top