Вопрос по xml, tsql, sql – Аргумент 1 метода типа данных XML «значение» должен быть строковым литералом

13

Как изменить мой запрос T-SQL, чтобы эта ошибка не возникала:

'The argument 1 of the XML data type method "value" must be a string literal.'

Код T-SQL:

<code>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
</code>

Ваш Ответ

2   ответа
5

используяnodes уничтожить 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
20

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
эта проблема была в исходном запросе. во всяком случае, ответ был обновлен.
+1 для sql: переменная (& quot; @ Count & quot;)]. Благодарю.
Нет, не было. С помощью[1] или любой другой номер будет работать просто отлично. Это не удалось, потому что вы представилиsql:variable.
Ваше выражение xpath не разрешается до одного значения. Ну, на самом деле это так, но компилятор этого не знает.
sql:variable работает только внутри выражения XPath. Я не могу, например, вставить целое заклинание XML DML илиdeclare операторы из переменной.

Похожие вопросы