program tip

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

radiobox 2020. 12. 25. 09:10
반응형

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


나는 질문 중 하나에서 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.

결과에 ,using for xml path추가 하여 행을 연결합니다 ,a,b,c,d. 그런 다음 사용 stuff하면 먼저 ,대체 하므로 제거됩니다.

('')에가 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
...

참조 URL : https://stackoverflow.com/questions/21623593/what-is-the-meaning-of-select-for-xml-path-1-1

반응형