2016-10-17 3 views
0
declare @cols nvarchar(max) 

set @cols = (select distinct quotename(name) 
      from students 
      for xml path(''),type).value('.','nvarchar(max)') 
exec @cols 

값 기능의 첫 번째 매개 변수 ('.')는 무엇이며 왜이 오류가 발생합니까? 값의 첫 번째 매개 변수 ('.')는 무엇입니까

메시지 (203), 레벨 16, 상태 2, 라인 3
이름 '[파반] 프라 모드가 [sachin] shital]하기 Shubham] [소니 카] 유효한 식별자

아니다.

+0

무엇을하려고합니까? –

답변

0

아래와 같은 순서로 특정 이름을 선택할 수 있습니다

:

1) 실제 질문 : XPath에있는 점은 무엇인가

점은 current 요소를 가리 킵니다. XPath/XQuery을 사용하여 XML을 읽는 것은 나무를 탐색하는 것과 같습니다. 당신은 더 깊이 움직일 수 있고 당신은 뒤로 이동할 수 있습니다.

아무런 조치없이 현재 요소가 첫 번째 요소 (대부분의 경우 루트 요소)입니다.

그러나 일부 방법, 특히 .query().nodes()은 현재 요소를 다른 요소로 설정합니다.

확인이

DECLARE @xml XML= 
(N'<root> 
    <Level1 nodeLevel="level1"> 
     <Level2 nodeLevel="level2">test</Level2> 
    </Level1> 
</root>'); 

SELECT @xml.query('.') AS ThisIsTheCurrentNode 

SELECT @xml.query('/root/Level1').query('.') AS NowLevel1IsTheCurrentNode 

SELECT @xml.query('/root/Level1').query('.').value('(Level1/@nodeLevel)[1]','nvarchar(100)') AS AndThisLevel1Attribute 
     ,@xml.query('/root/Level1/Level2').query('.').value('.','nvarchar(100)') AS AndThisLevel2Value 

2) 왜 이런 오류가?

당신은

declare @cols nvarchar(max) 
set @cols = (select distinct quotename(name) 
      from students 
      for xml path(''),type).value('.','nvarchar(max)') 
exec @cols 

을 시도 그리고 당신은 얻을

메시지 203, 수준 16, 상태 2, 3 호선 이름 '[파반] [프라 모드] [sachin] [shital] shubham] [sonika] '은 (는) 유효한 식별자가 아닙니다.

무엇을 기대합니까? 귀하의 진술은 (인용 된) students.name 값을 연결하는 것 이상을 수행하지 않습니다. 따라서 @cols의 내용은 오류로 처리되는 문자열 일뿐입니다. 구분 문자가 없습니다 ...

을 시도하면 이름 목록을 실행합니다 ...나는 이것이 단지 당신이 무엇이 아니라는 희망 일뿐입니다. 정말 :-)

0

exec 대신 select를 사용해보십시오. 당신이 어떤 질문이 아닌 이름으로 @cols 값을 설정하기 때문에.

declare @cols nvarchar(max) 
set @cols=(select distinct quotename(name) from students for xml path(''),type).value('.','nvarchar(max)') 
SELECT @cols 

당신이 XML 값을 만들고있다 FOR XML PATH('')를 사용하는 value('.', 'varchar(max)')와 변수 @myDoc

DECLARE @myDoc xml 

SET @myDoc = ' 
<Name> Mr. X 
</Name> 
<Name> Mr. Y 
</Name> 
<Name> Mr. Z 
</Name> ' 

다음은 단지 XML 태그를 제외하고로 변환 모든 값을 선택하는 것처럼 학생들 테이블의 모든 이름을 포함 varchar (최대).

SELECT @myDoc.value('.', 'varchar(max)') -- will return 'Mr. X Mr. Y Mr. Z' 
또한 두 가지 문제가 귀하의 질문에
SELECT @myDoc.value('(/Name)[1]', 'varchar(max)') -- will return Mr. X 
SELECT @myDoc.value('(/Name)[2]', 'varchar(max)') -- will return Mr. Y 
SELECT @myDoc.value('(/Name)[3]', 'varchar(max)') -- will return Mr. Z 
+0

무엇입니까? '값 매개 변수 – ARJUN

+0

즉, XML 태그 만 제외하고 값을 반환합니다. 내 대답을 기다리십시오. – Esty

+0

자세한 내용은 https://msdn.microsoft.com/en-us/library/ms178030.aspx – Esty

관련 문제