2012-06-14 3 views

답변

13

당신은 값 방법이 방법으로 문자열로 변수를 연결할 수 없습니다. sql:variable("@VariableName")을 사용해야합니다.

Declare @Count Int = 1 
While(@count <= @j) 
Begin 
insert into mytable 
([Word]) 

Select ([XmlColumn].value(N'/word[sql:variable("@Count")]/@Entry)[1]','nvarchar(max)')) 
    from OtherTable WHERE ID=2 
+0

변수 이름에 따옴표를 사용하지 마십시오 : SQL을 : 변수 ("변수 이름 @") -> SQL : 변수 (@VariableName) – HuRN

1

생각 나는 WHILE 루핑 필요하지 않습니다이에 대한 접근 방식에 대한보고 싶은데 :

그래서 예는 다음과 같이 될 것이다. 그래서 다른 방법이 될 것이다 http://social.msdn.microsoft.com/Forums/nl/sqlxml/thread/46a7a90d-ebd6-47a9-ac56-c20b72925fb3

: 가장 큰 문제는 노드와 함께 항목의 위치를 ​​반환하지만,이 게시물의 마지막 대답 해결 방법을 발견

insert into mytable ([Word]) 
select word from (
    Select 
     words.value('@entry','nvarchar(max)') as word, 
     words.value('1+count(for $a in . return $a/../*[. << $a])', 'int') as Pos 
    from 
     OtherTable ot 
     cross apply ot.XMLColumn.nodes('words/word') x(words) 
) sub where Pos <= @j 

기본적으로 내부 쿼리 반환 각 단어 및 위치는 외부 쿼리에 의해 필터링 될 수 있습니다.

은 참조를 위해 OtherWords 테이블의 나의 정의했다 :

create table OtherTable (XMLColumn xml) 
insert OtherTable (XMLColumn) 
select '<words><word entry="Wibble"/><word entry="Hello"/><word entry="World"/></words>'