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.
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.
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.
0 comentários