2010-07-14 45 views
1

我有这个存储过程,从XML中读取数据,并提出一些刀片存储过程 - 传递参数的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为null跳过记录,并没有使插入

回答

0

你只需要一个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) 
+0

宾果。我从第一个地方尝试过,但有一个错误。对于[C1]为NULL,标记必须丢失,并且我使用 null ion 2010-07-14 09:35:53

相关问题