Аргумент 1 метода типа данных XML "value" должен быть строковым литералом
Как изменить мой запрос T-SQL, чтобы эта ошибка не возникла:
'аргумент 1 метода типа данных XML "value" должен быть строкой буквальный.'
код 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
2 ответов
вы должны использовать переменную 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
вы можете удалить цикл while и сделать вставку за один раз, используя 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