2012-10-01 3 views
1

이것은 금요일 오후에 좋은 생각 인 것 같았지만 약간의 문제가 있습니다. 전에 SQL XML 쿼리를 사용하지 않았으므로 어리석은 일을했을 수도 있습니다. 기본적으로 일련의 문자열을 전달하여 테이블을 저장 프로 시저에 쿼리하려고합니다.SQL에서 쿼리 XML 매개 변수

나는 이것에 대해 조금 생각하고 CSV를 사용하는 것으로 생각한 다음 XML을 사용하여 이것을 시도하기로 결정했습니다. 내가 XML 값 형식으로 저장된 프로 시저에이 통과하고있어

<Root> 
    <string>value</string> 
    <string>value</string> 
    <string>value</string> 
    <string>value</string> 
</Root> 

: 문자열의 테이블에 XML을 분쇄기에

CREATE PROCEDURE usp_UpdateHotelImages 
    -- Add the parameters for the stored procedure here 
    @hotelID int, 
    @imageIDs xml 
AS 
BEGIN 

그래서 내가 원하는 같은 내 XML 보인다.

SELECT Child.value('(string)[1]', 'varchar(200)') 
FROM @imageIDs.nodes('/Root/') AS N(Child)) 

하지만 난 잘 여기 믿을 수 없을만큼 바보 그래서 어떤 도움을 기꺼이받을 것입니다 일을 할 수있는 오류 메시지 XQuery [nodes()]: Syntax error near '<eof>', expected a "node test".

가 계속 :

내 SQL은 다음과 같습니다.

내가 도움이 단일 쿼리로 세분화 한

업데이트 :

DECLARE @imageIDs xml 
SET @imageIDs = '<Root> 
    <string>value</string> 
    <string>value</string> 
    <string>value</string> 
    <string>value</string> 
</Root>' 

SELECT Child.value('(string)[1]', 'varchar(200)') 
     FROM @imageIDs.nodes('/Root/') AS N(Child) 

답변

2

문제는 노드 기능의 마지막 /입니다. 당신이 달성하려고하는지에 따라

SELECT Child.value('(string)[1]', 'varchar(200)') 
FROM @imageIDs.nodes('/Root') AS N(Child) 

또는 대안

SELECT Child.value('(.)[1]', 'varchar(200)') 
FROM @imageIDs.nodes('/Root/*') AS N(Child) 

.

+0

, 더 이상지고 예외 BTW

, 나는 SELECT은 다음에 의해 달성되는 테이블로 값을 반환하는 당신이 찾고있는 생각 하지만 하나의 행만 반환합니까? – Liam

+0

당신은 내 마음을 읽었습니다! 고마워! – Liam

1

노드 표현에서 후행으로 인해 /이 (가) 오류가 발생했습니다. 그냥 /Root이어야합니다.

DECLARE @imageIDs XML 

SELECT @imageIDs = ' 
<Root> 
    <string>value</string> 
    <string>value2</string> 
    <string>value3</string> 
    <string>value4</string> 
</Root>' 

SELECT 
    Child.value('(.)[1]', 'varchar(200)') 
FROM @imageIDs.nodes('/Root/string') AS N(Child) 

결과 :

도왔다
value 
value2 
value3 
value4 

(4 row(s) affected)