1

我的存储过程是这样的:

alter procedure insertxml
   @inxml xml
as

insert into imagess
  (ids, photo, names)
values 
  (@inxml.value('(/imagess/ids)[1]', 'int'),
   @inxml.value('(/imagess/photo)[1]', 'char'),
   @inxml.value('(/imagess/names)[1]', 'varchar(10)'))

exec insertxml '<imagess>
                  <ids>31</ids>
                  <photo>N</photo>
                  <names>30</names>
                  <ids>11</ids>
                  <photo>O</photo>
                  <names>20</names>
                  <ids>12</ids>
                  <photo>A</photo>
                  <names>43</names>
                </imagess>'

通过这个,我只能插入第一行。我想插入所有 3 行。

4

1 回答 1

2

正如 OMG Ponies 在他的评论中指出的那样,需要调整 XML 代码才能使其正常工作;但是,我认为您正在寻找的是类似的东西(注意 XML 中的附加标签):

DECLARE @imagess TABLE (ids INT, photo VARCHAR(1), NAMES INT)
DECLARE @inxml XML = '<imagess>
                  <image><ids>31</ids>
                  <photo>N</photo>
                  <names>30</names>
                  </image><image>
                  <ids>11</ids>
                  <photo>O</photo>
                  <names>20</names>
                  </image><image>
                  <ids>12</ids>
                  <photo>A</photo>
                  <names>43</names>
                  </image>
                </imagess>'


insert into @imagess
  (ids, photo, names)
SELECT c.value('(./ids)[1]', 'int'),
   c.value('(./photo)[1]', 'char'),
   c.value('(./names)[1]', 'varchar(10)')
FROM @inxml.nodes('//image') T(c)

SELECT *
FROM @imagess 
于 2013-01-08T03:59:29.193 回答