1

我正在尝试使用 xml 更新表。

UPDATE dbo.M_Picture
SET Sequence = T.c.query('Sequence')
FROM dbo.M_Picture pic
INNER JOIN @xml.nodes('/pictures/picture') T(c)
ON pic.PictureId = T.c.query('pictureId') --I guess issue is in this line

我使用的 XML 是

<pictures>
  <picture>
    <pictureId>30</pictureId>
    <Sequence>4</Sequence>
  </picture>
  <picture>
    <pictureId>31</pictureId>
    <Sequence>4</Sequence>
  </picture>
</pictures>

我收到的错误消息是

操作数类型冲突:xml 与 int 不兼容

这是有道理的,因为在

pic.PictureId=T.c.query('pictureId')

pictureIdint

如何解决这个问题?

4

1 回答 1

2

试试这个:

UPDATE dbo.M_Picture
SET Sequence = T.c.query('Sequence')  -- this here *also* assign an XML fragment to "Sequence"
FROM dbo.M_Picture pic
INNER JOIN @xml.nodes('/pictures/picture') T(c)
ON pic.PictureId = T.c.value('(pictureId)[1]', 'int')

使用.value()XML 上的方法 - 返回标量类型(如int

另外:我不确定您是否真的想将 XML 片段分配<Sequence>4</Sequence>给您的列Sequence- 或者您是否也想在.value()那里使用该方法!

于 2012-07-22T19:57:20.610 回答