0

私は xml 形式のメッセージのリストを持っています。OpenXML を使用してメッセージ ID をストアド プロシージャに送信し、ステータスを「A」ステータスに更新したいと考えています。ここでのコーディングは次のようになります。

XML サンプル形式:

 <Message>
    <MessageID>17</MessageID>
    <MessageID>16</MessageID>
    <MessageID>15</MessageID>
 </Message>

ストアド プロシージャの場合:

exec sp_xml_preparedocument @idoc OUTPUT, @XmlMessagesItems  

方法 1:

UPDATE SECMSG_TO   
SET SECMSG_TO.Status='A'
FROM OPENXML (@idoc, '/Message',2) 
     with ( MessageID INT) ox  
WHERE  
    SECMSG_TO.MessageID = ox.MessageID 

または方法 2:

  UPDATE SECMSG_TO   
  SET SECMSG_TO.Status = 'A'
  WHERE SECMSG_TO.MessageID IN (SELECT *  
                                FROM OPENXML  (@idoc, '/Message',2) 
                                WITH ( MessageID INT)        
                            )

しかし、どちらの方法でも、最初のメッセージは17番を意味するだけで更新でき、他のメッセージは影響を受けていません。すべてのリストを完全に更新する方法を教えてください。

ありがとう。

4

4 に答える 4

0

Messageノードのリストが必要なノードのリストを取得していますMessageID

SELECT MessageID  
FROM OPENXML (@idoc, '/Message/MessageID',2) 
WITH (MessageID INT '.') 
于 2012-05-31T06:42:28.120 に答える
0
First Way: XML Format
  <?xml version="1.0" encoding="utf-8" ?>
  <Messages>
    <Message MessageID='33' />
    <Message MessageID='34' />
    <Message MessageID='20' />   
  </Messages>

 in Stored Procedure
  @XmlMessagesItems text
  DECLARE @idoc INT
  EXEC sp_xml_preparedocument @idoc OUTPUT, @XmlMessagesItems  
  UPDATE TableName   SET Status='A'
              from OPENXML  (@idoc, '/Messages/Message',1) 
              with ( MessageID INT) ox  
              WHERE MessageID = ox.MessageID  
于 2012-05-31T22:53:41.367 に答える
0
 XML Format
  <?xml version="1.0" encoding="utf-8" ?>
  <Messages>
    <Message MessageID='33' />
    <Message MessageID='34' />
    <Message MessageID='20' />   
  </Messages>

    in Stored Procedure
    SELECT @MessageID = MessageID      
    FROM OPENXML (@idoc, '/Messages/Message', 1)             
     WITH       
     (             
         MessageID   int 
     )        

     UPDATE TableName SET Status='A'     
         WHERE MessageID = @MessageID 
于 2012-05-31T23:00:25.643 に答える
0
  XML Format
  <?xml version="1.0" encoding="utf-8" ?>
  <Messages>
    <Message MessageID='33' />
    <Message MessageID='34' />
    <Message MessageID='20' />   
  </Messages>

 in Stored Procedure
  UPDATE TableName   SET Status='A'          
     WHERE MessageID IN
     (
           select *  from OPENXML  (@idoc, '/Messages/Message',1) with ( MessageID INT )        
              )
于 2012-05-31T22:57:06.187 に答える