O modo PATH é usado na geração de XML a partir de uma consulta SELECT
1. SELECT
ID,
Name
FROM temp1
FOR XML PATH;
Ouput:
<row>
<ID>1</ID>
<Name>aaa</Name>
</row>
<row>
<ID>1</ID>
<Name>bbb</Name>
</row>
<row>
<ID>1</ID>
<Name>ccc</Name>
</row>
<row>
<ID>1</ID>
<Name>ddd</Name>
</row>
<row>
<ID>1</ID>
<Name>eee</Name>
</row>
A Saída é um XML centrado no elemento em que cada valor da coluna no conjunto de linhas resultante é agrupado em um elemento de linha. Como a cláusula SELECT não especifica nenhum alias para os nomes das colunas, os nomes dos elementos filhos gerados são iguais aos nomes das colunas correspondentes na cláusula SELECT.
Para cada linha do conjunto de linhas, uma tag é adicionada.
2.
SELECT
ID,
Name
FROM temp1
FOR XML PATH('');
Ouput:
<ID>1</ID>
<Name>aaa</Name>
<ID>1</ID>
<Name>bbb</Name>
<ID>1</ID>
<Name>ccc</Name>
<ID>1</ID>
<Name>ddd</Name>
<ID>1</ID>
<Name>eee</Name>
Para a Etapa 2: se você especificar uma cadeia de comprimento zero, o elemento de quebra automática não será produzido.
3.
SELECT
Name
FROM temp1
FOR XML PATH('');
Ouput:
<Name>aaa</Name>
<Name>bbb</Name>
<Name>ccc</Name>
<Name>ddd</Name>
<Name>eee</Name>
4. SELECT
',' +Name
FROM temp1
FOR XML PATH('')
Ouput:
,aaa,bbb,ccc,ddd,eee
Na etapa 4, estamos concatenando os valores.
5. SELECT ID,
abc = (SELECT
',' +Name
FROM temp1
FOR XML PATH('') )
FROM temp1
Ouput:
1 ,aaa,bbb,ccc,ddd,eee
1 ,aaa,bbb,ccc,ddd,eee
1 ,aaa,bbb,ccc,ddd,eee
1 ,aaa,bbb,ccc,ddd,eee
1 ,aaa,bbb,ccc,ddd,eee
6. SELECT ID,
abc = (SELECT
',' +Name
FROM temp1
FOR XML PATH('') )
FROM temp1 GROUP by iD
Ouput:
ID abc
1 ,aaa,bbb,ccc,ddd,eee
Na Etapa 6, estamos agrupando a data por ID.
STUFF (source_string, start, length, add_string) Parâmetros ou argumentos source_string A cadeia de origem a ser modificada. start A posição no source_string para excluir caracteres de comprimento e, em seguida, insira add_string. length O número de caracteres a serem excluídos do source_string. add_string A sequência de caracteres a serem inseridos no source_string na posição inicial.
SELECT ID,
abc =
STUFF (
(SELECT
',' +Name
FROM temp1
FOR XML PATH('')), 1, 1, ''
)
FROM temp1 GROUP by iD
Output:
-----------------------------------
| Id | Name |
|---------------------------------|
| 1 | aaa,bbb,ccc,ddd,eee |
-----------------------------------