2017-10-11 2 views
-1

사람은 내가 아는 바로는 실제로 SELECT (STUFF SELECT...))FOR XML PATH(''), TYPE).value('.','NVARCHAR(max)')정확히 XML 경로 란 무엇입니까? <code>XmlPath('')</code><strong>에 CONCATENATE 열 데이터</strong> 단일 행에 :

무엇보다 세부 설명하십시오 수 있습니다. Stuff이며 문자열 연결 후 처음 ','을 제거하는 데 사용됩니다.

그럼 TYPE).value('.','NVARCHAR(max)') 은요?

+2

[SQL Server에서의 작업 및 XML 경로 사용 방법] (https://stackoverflow.com/questions/31211506/how-stuff-and-for-xml-path-work-in-sql)의 가능한 복제본 -server) –

+0

@ KenY-N 왜 내 데이터베이스에서 제대로 실행될 수 있습니까? –

+0

저는 새로운 초보자이므로 올바른 정보를 얻고 싶습니다. –

답변

1

그럼 TYPE).value('.','NVARCHAR(max)') 은요? FOR XML PATH

기본은 당신은 SO (예를 들어 1, 또는 2)에 질문/답변을 많이 찾을 수 있습니다.

TYPE 지시어에 초점을 맞 춥니 다.

SELECT 
    [text()]=dt.x+';' 
FROM 
    (
     VALUES('text > blabla'), 
       ('text < blabla'), 
       ('f&m') 
    ) AS dt(x) 
FOR XML 
    PATH(''); 

결과는 다음과 같습니다 : 파생 테이블 dt의 문자열을 연결 다음 T-SQL 문을 고려

text &gt; blabla;text &lt; blabla;f&amp;m; 

당신은 >, <&가 치환되는 것을 확인할 수 있습니다 &gt;, &lt;&amp;. 특수 문자 (XML 미리 정의 된 엔터티)가 대체됩니다.

TYPE 지정 문을 지정하여이 기능을 비활성화 할 수 있습니다.이 지시문을 텍스트가 아닌 XML로 내 보낸 다음 XML에서 문자열 값을 가져옵니다. 결과 XML에서이 문자열 값을 가져 오는 방법은 value() 메서드를 사용하여 수행 할 수 있습니다.

위의 예에서 TYPE 지시어를 사용 :

SELECT 
    (
     SELECT 
      [text()]=dt.x+';' 
     FROM 
      (
       VALUES('text > blabla'), 
         ('text < blabla'), 
         ('f&m') 
      ) AS dt(x) 
     FOR XML 
      PATH(''), TYPE 
    ).value('.','NVARCHAR(MAX)'); 

당신은 얻을 것이다 :

text > blabla;text < blabla;f&m; 

당신은 XML 특수 문자가 대체되지 않는 것을 볼 수 있습니다.

관련 문제