Ho pensato di cercare un approccio a questo che non richiede l'WHILE
loop. Il problema principale sta ritornando una posizione oggetto insieme con il nodo, ma ho trovato una soluzione nell'ultima risposta su questo post: http://social.msdn.microsoft.com/Forums/nl/sqlxml/thread/46a7a90d-ebd6-47a9-ac56-c20b72925fb3
Quindi l'approccio alternativo potrebbe essere:
insert into mytable ([Word])
select word from (
Select
words.value('@entry','nvarchar(max)') as word,
words.value('1+count(for $a in . return $a/../*[. << $a])', 'int') as Pos
from
OtherTable ot
cross apply ot.XMLColumn.nodes('words/word') x(words)
) sub where Pos <= @j
Fondamentalmente i rendimenti query interna ogni parola e la sua posizione, questa può essere filtrata dalla query esterna.
Per riferimento mia definizione della tabella OtherWords
era:
create table OtherTable (XMLColumn xml)
insert OtherTable (XMLColumn)
select '<words><word entry="Wibble"/><word entry="Hello"/><word entry="World"/></words>'
fonte
2012-06-14 09:32:29
Non utilizzare le virgolette sul nome di variabile: SQL: variabile ("@ VariableName") -> sql: variable (@VariableName) – HuRN