튜토리얼 - sql이란




SELECT... FOR XML PATH(''), 1,1)의 의미는 무엇입니까? (2)

나는 question 중 하나에서 SQL을 배우고 있으며, 여기에 나는이 사용법을 보았으며, 어떤 몸은 SQL에서 xml path ( '')의 의미를 이해할 수 있습니까? 그리고 예, 나는 웹 페이지를 통해 브라우징했는데, 나는 그것을 아주 잘 이해하지 못했습니다!

그 코드는 무엇을할까요? (일부만 select )

declare @t table
(
    Id int,
    Name varchar(10)
)
insert into @t
select 1,'a' union all
select 1,'b' union all
select 2,'c' union all
select 2,'d' 

select ID,
stuff(
(
    select ','+ [Name] from @t where Id = t.Id for XML path('')
),1,1,'') 
from (select distinct ID from @t )t

여기에서 배울 실제 기술은 없습니다. 여러 행의 데이터를 단일 문자열로 연결하는 것은 단순한 귀여운 트릭입니다. XML 서식 기능을 의도 한 용도로 사용하는 것보다 기발한 기능을 사용합니다.

SELECT ',' + ColumnName ... FOR XML PATH('')

ColumnName 열의 데이터 행을 여러 개 결합하여 쉼표로 구분 된 값 집합을 생성합니다. ,abc,def,ghi,jkl 과 같은 값을 생성합니다.

STUFF(...,1,1,'')

이전 트릭이 생성 한 선행 쉼표를 제거하는 데 사용됩니다. 매개 변수에 대한 자세한 내용은 STUFF 를 참조하십시오.

(이상하게도 많은 사람들은 STUFF 만 트리밍의 마지막 비트를 책임지고 있음에도 불구하고 쉼표로 구분 된 값 집합을 "STUFF 방법"으로 생성하는이 방법을 사용하는 경향이 있습니다)


참조했던 SQL은 MSSQL 문자열 연결에 사용됩니다.

그것은 결과에 for xml path 를 사용하여 선행하여 행을 연결합니다 ,a,b,c,d . 그런 다음 stuff 을 사용하여 먼저 바꿉니다. , 따라서 그것을 제거하십시오.

('') in for xml path 는 자동으로 생성되는 래퍼 노드를 제거하는 데 사용됩니다. 그렇지 않으면 <row>,a,b,c,d</row> 처럼 보일 것입니다.

...
stuff(
  (
  select ',' + CAST(t2.Value as varchar(10)) from #t t2 where t1.id = t2.id 
  for xml path('')
  )
,1,1,'') as Value
...






sql-server