XML数据类型方法“value”的参数1必须是字符串文字

时间:2012-05-02 05:57:51

标签: sql xml tsql

如何更改我的T-SQL查询,以便不会发生此错误:

  

'XML数据类型方法“value”的参数1必须是字符串   文字'。

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 个答案:

答案 0 :(得分:20)

您必须隐式使用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

答案 1 :(得分:5)

您可以删除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
相关问题