quarta-feira, 26 de agosto de 2009

Split parte 3

Assim como o post Split parte 2, este exemplo quebra uma linha separada por ";" em linhas usando recursos do XQuery, porém a partir de uma tabela e não de uma variavel com valores fixos.




Create Table #tmpLista (idLinha Int, xCol VarChar(max))
Insert Into #tmpLista Values (1, 'Linha A1;Linha B1;Linha C1;Linha D1;Linha E1;Linha F1')
Insert Into #tmpLista Values (2, 'Linha A2;Linha B2;Linha C2;Linha D2;Linha E2;Linha F2')
Insert Into #tmpLista Values (3, 'Linha A3;Linha B3;Linha C3;Linha D3;Linha E3;Linha F3')
Insert Into #tmpLista Values (4, 'Linha A4;Linha B4;Linha C4;Linha D4;Linha E4;Linha F4')
Insert Into #tmpLista Values (5, 'Linha A5;Linha B5;Linha C5;Linha D5;Linha E5;Linha F5')
Insert Into #tmpLista Values (6, 'Linha A6;Linha B6;Linha C6;Linha D6;Linha E6;Linha F6')
Insert Into #tmpLista Values (7, 'Linha A7;Linha B7;Linha C7;Linha D7;Linha E7;Linha F7')
Insert Into #tmpLista Values (8, 'Linha A8;Linha B8;Linha C8;Linha D8;Linha E8;Linha F8')
Insert Into #tmpLista Values (9, 'Linha A9;Linha B9;Linha C9;Linha D9;Linha E9;Linha F9')
Insert Into #tmpLista Values (10, 'Linha A10;Linha B10;Linha C10;Linha D10;Linha E10;Linha F10')
DECLARE @delimiter NVARCHAR(5)
Set @delimiter = ';'
;with tbLista as (
SELECT CAST ( '' + REPLACE ( xCol , @delimiter , '' ) + '' AS xml ) AS xCol, idLinha
From #tmpLista
Where idLinha Between 1 and 5
)
SELECT T.split.value('.', 'nvarchar(max)') AS data, idLinha
FROM tbLista CROSS APPLY xCol.nodes('/d') T (split)

Drop Table #tmpLista

Nenhum comentário:

Postar um comentário