A melhor maneira de aprender alguma coisa é rever alguns dos blogs mais antigos e depois procurar uma maneira mais eficiente de trabalhar no mesmo problema. Recentemente estive a olhar para os fóruns para encontrar uma pergunta que voltava a surgir repetidamente, fazendo uma lista separada por vírgulas. Isto não é novidade neste blogue e se pesquisar, obterá poucos. Há muito tempo atrás escrevi abaixo blogs para mostrar os valores armazenados na tabela como lista separada por vírgulas – isto não é uma refase do que foi escrito antes, mas uma forma mais recente de resolver o problema novamente.

SQL SERVER – Creating Comma Separate Values List from Table – UDF – SP
SQL SERVER – Comma Separated Values (CSV) from Table Column

Recentemente alguém me perguntou o contrário. Eles estavam a armazenar valores separados por vírgulas numa coluna de tabela. Esta tabela estava a ser preenchida a partir de alguma fonte através de um pacote SSIS. Aqui está a versão simplificada do problema que me foi apresentada.

DECLARE @t TABLE(EmployeeID INT,Certs VARCHAR(8000))INSERT @t VALUES (1,'B.E.,MCA, MCDBA, PGDCA'), (2,'M.Com.,B.Sc.'), (3,'M.Sc.,M.Tech.')

É assim que os dados se parecem na tabela.

SERVADORSQL - Lista Separada por Vírgula Sem Utilizar uma Função csv-split-01

SERVADORSQL - Lista Separada por Vírgulas Sem Utilizar uma Função csv-split-01

Com os dados acima disponíveis, eles querem que seja dividido em valores individuais. Na procura de possíveis soluções, aqui está a consulta de solução que eu arranjei:

SELECT EmployeeID,LTRIM(RTRIM(m.n.value('.','varchar(8000)'))) AS CertsFROM(SELECT EmployeeID,CAST('<XMLRoot><RowData>' + REPLACE(Certs,',','</RowData><RowData>') + '</RowData></XMLRoot>' AS XML) AS xFROM @t)tCROSS APPLY x.nodes('/XMLRoot/RowData')m(n)


Output looks like below.

SERVADORSQL - Lista Separada por Vírgula sem Utilizar uma Função csv-split-02

SERVADORSQL - Split Comma Separated List Without Using a Function csv-split-02

Hope que isto o ajude no seu projecto. Informe-me se for capaz de encontrar uma solução diferente para o mesmo problema. A melhor maneira de aprender é aprender uns com os outros.

Categorias: Articles

0 comentários

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *