[SQL] XML 데이터 형식 방법 "값"의 인수 하나는 문자열 리터럴이어야합니다
SQLXML 데이터 형식 방법 "값"의 인수 하나는 문자열 리터럴이어야합니다
어떻게 이런 오류가 발생하지 않도록 내 T-SQL 쿼리를 변경합니다 :
T-SQL 코드 :
Declare @Count Int = 1
While(@count <= @j)
Begin
insert into mytable
([Word])
Select ([XmlColumn].value(N'word['+Cast(@Count as nvarchar(2))+']/@Entry','nvarchar(max)'))
from OtherTable WHERE ID=2
해결법
-
==============================
1.당신은 암시 적으로 SQL 변수를 사용해야합니다 :
당신은 암시 적으로 SQL 변수를 사용해야합니다 :
Declare @Count Int = 1 While(@count <= @j) Begin insert into mytable ([Word]) Select ([XmlColumn].value('(/word[sql:variable("@Count")]/@Entry)[1]','nvarchar(max)')) from OtherTable WHERE ID=2
-
==============================
2.당신은 동안 루프를 제거하고 하나는 분쇄기는 XML에 노드를 사용하여 이동에 삽입 할 수 있습니다.
당신은 동안 루프를 제거하고 하나는 분쇄기는 XML에 노드를 사용하여 이동에 삽입 할 수 있습니다.
insert into mytable([Word]) select N.value('@Entry', 'nvarchar(max)') from OtherTable cross apply XmlColumn.nodes('word') as T(N) where ID = 2
@j 인 경우 당신은 당신이 대신 사용할 수 있습니다 MYTABLE에 삽입 할 행의 수를이 제한합니다.
insert into mytable([Word]) select ID from ( select N.value('@Entry', 'nvarchar(max)') as ID, row_number() over(order by T.N) as rn from OtherTable cross apply XmlColumn.nodes('word') as T(N) where ID = 2 ) T where rn <= @j
어떤 이유로 당신이 정말로 루프를 사용하고자하는 경우에 당신은 대신 다음과 같이 할 수 있습니다.
while @Count <= @j begin insert into mytable([Word]) select XMLColumn.value('(/word[sql:variable("@Count")]/@Entry)[1]', 'nvarchar(max)') from OtherTable where ID = 2
from https://stackoverflow.com/questions/10408445/the-argument-1-of-the-xml-data-type-method-value-must-be-a-string-literal by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 다람쥐 PostgreSQL의 함수 정의 : 종단되지 않은 달러 인용 된 문자열 (0) | 2020.07.10 |
---|---|
[SQL] 쉼표 하나의 열 값을 분리 - SQL SERVER를 (0) | 2020.07.10 |
[SQL] 이전과 현재 행의 차이를 찾기 SQL은 (0) | 2020.07.10 |
[SQL] # 1366 - 잘못된 정수 값 : MYSQL (0) | 2020.07.10 |
[SQL] MM : HH에 DATEDIFF SS 형식 (0) | 2020.07.10 |