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 に答える