xml path ( '') 출력용


9

내가 다음을 실행할 때

select t.type
  from (values ('Green'),('Blue'),('Red')) as t(type)
   for xml path('')

이 결과를 받는다

<type>Green</type>
<type>Blue</type>
<type>Red</type>

내가 다음을 실행하면

select t.type + '/'
  from (values ('Green'),('Blue'),('Red')) as t(type)
   for xml path('')

이 결과를 받는다

Green/Blue/Red/

선택에 연결을 추가하면 유형 태그가 제거되고 xml 파일의 한 줄에 출력되는 이유는 무엇입니까? SQL Server 2012를 실행합니다.

답변:


15

XML은 본질이다

연결된 문자열을 추가하면 "경로 요소"가 손실됩니다.

예를 들어이 작업을 수행하는 경우 :

SELECT t.type + '/' AS type
FROM   ( VALUES ( 'Green' ), ( 'Blue' ), ( 'Red' )) AS t ( type )
FOR XML PATH('');

SELECT t.type + '/' 
FROM   ( VALUES ( 'Green' ), ( 'Blue' ), ( 'Red' )) AS t ( type )
FOR XML PATH('type');

당신은 이것을 다시 얻는다 :

<type>Green/</type>
<type>Blue/</type>
<type>Red/</type>

열 이름 또는 별명은 경로 요소 역할을합니다.

도움이 될 수있는 다른 예

사용 RAW, ELEMENTS

SELECT t.type + '/'
FROM   ( VALUES ( 'Green' ), ( 'Blue' ), ( 'Red' )) AS t ( type )
FOR XML RAW, ELEMENTS;

SELECT t.type + '/' AS type
FROM   ( VALUES ( 'Green' ), ( 'Blue' ), ( 'Red' )) AS t ( type )
FOR XML RAW, ELEMENTS;

첫 번째 예에서는 일반적인 "행"요소 이름을 얻지 만 두 번째 예에서는 행 / 유형을 얻습니다.

사용시 RAW, TYPE:

SELECT t.type + '/' AS type
FROM   ( VALUES ( 'Green' ), ( 'Blue' ), ( 'Red' )) AS t ( type )
FOR XML RAW, TYPE;

SELECT t.type + '/'
FROM   ( VALUES ( 'Green' ), ( 'Blue' ), ( 'Red' )) AS t ( type )
FOR XML RAW, TYPE;

첫 번째 쿼리는 유효한 XML을 반환하고 두 번째 쿼리는 경로 요소에 식별자가 없기 때문에 오류를 발생시킵니다.

을 사용 AUTO하면 테이블 별칭과 열 이름이 경로로 바뀝니다.

SELECT type + '/' AS type
FROM   ( VALUES ( 'Green' ), ( 'Blue' ), ( 'Red' )) AS t ( type )
FOR XML AUTO;

SELECT type 
FROM   ( VALUES ( 'Green' ), ( 'Blue' ), ( 'Red' )) AS t ( type )
FOR XML AUTO;

그러나 별칭이 없으면 비슷한 오류가 발생합니다.

SELECT type + '/'
FROM   ( VALUES ( 'Green' ), ( 'Blue' ), ( 'Red' )) AS t ( type )
FOR XML AUTO;

나는 예를 들어 FOR XML EXPLICIT보았지만 지금 술을 마시기 시작하는 것은 무책임한 일입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.