Хранимая процедура - передача параметра в формате xml и чтение данных - PullRequest
1 голос
/ 14 июля 2010

У меня есть эта хранимая процедура, которая читает данные из XML и делает некоторые вставки

ALTER procedure [dbo].[SP_InsertIOs] 
    @iosxml xml AS

DECLARE @currRecord int    

-- parse the records from the XML
  EXECUTE sp_xml_preparedocument @currRecord OUTPUT, @iosxml     
  BEGIN TRY       
   INSERT INTO SN_IO ( [C1] ,[C2]  ,[C3] )
   SELECT [C1] ,[C2] ,[C3]
   FROM OPENXML (@currRecord, 'ios/io', 1)
   WITH ([C1] [varchar](25)       'C1',
         [C2] [varchar](25)       'C2',
         [C3] [varchar](20)       'C3'  )                                                                  
    END TRY
    BEGIN CATCH
        //SELECT SOME ERROR
    END CATCH
    EXECUTE sp_xml_removedocument @currRecord

XML выглядит так

<ios>
  <io>
    <C1>a</C1>
    <C2>b</C2>
    <C3>c</C3>    
  </io>
  <io>
    <C1>x</C1>
    <C2>y</C2>
    <C3>z</C3>
  </io>
</ios>

Все идет хорошо. Иногда C1 или C2 или C3 могут быть нулевыми, и вот мои вопросы:

В процедуре при выполнении вставок, если C1 равно нулю или C2 равно нулю или C3 равно нулю, пропустить эту запись и не делать вставку

1 Ответ

0 голосов
/ 14 июля 2010

Вам просто нужно предложение WHERE, я думаю.

   INSERT INTO SN_IO ( [C1] ,[C2]  ,[C3] )
   SELECT [C1] ,[C2] ,[C3]
   FROM OPENXML (@currRecord, 'ios/io', 1)
   WITH ([C1] [varchar](25)       'C1',
         [C2] [varchar](25)       'C2',
         [C3] [varchar](20)       'C3'  )    
    WHERE  [C1]  IS NOT NULL  AND [C2]  IS NOT NULL AND [C3] IS NOT NULL  

Или вы можете сделать это в XPath вместо этого, что, я думаю, может быть более эффективным

   FROM OPENXML (@currRecord, 'ios/io[C1 and C2 and C3]', 1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...