回答

收藏

存储过程-将参数作为xml传递并读取数据

技术问答 技术问答 321 人阅读 | 0 人回复 | 2023-09-12

我有此存储过程,该过程从xml读取数据并进行一些插入
* n+ _0 f9 W9 B- L& GALTER procedure [dbo].[SP_InsertIOs] # @- Z0 n. h" s
    @iosxml xml AS5 I$ q/ U0 ~' }4 f( r" X( B1 i
DECLARE @currRecord int, O# F3 d5 J6 e
-- parse the records from the XML6 [0 v+ {; ^. o2 S
  EXECUTE sp_xml_preparedocument @currRecord OUTPUT, @iosxml       _" w5 Z' h( l+ h( C" K: b
  BEGIN TRY       , {" u/ ^8 Q1 }2 W2 v* e+ `. Z% I
   INSERT INTO SN_IO ( [C1] ,[C2]  ,[C3] ), d6 F* c- @9 }8 P/ h" l! ^* b: x$ e  K
   SELECT [C1] ,[C2] ,[C3]1 t+ c2 I# e& W; d- k8 n
   FROM OPENXML (@currRecord, 'ios/io', 1)! _( H9 z: D% Q
   WITH ([C1] [varchar](25)       'C1',
' y' J; G2 b* |% J6 x9 [         [C2] [varchar](25)       'C2',
' ~( f6 l3 S9 g! \2 F9 J) L         [C3] [varchar](20)       'C3'  )                                                                  
! ^) R# h& X' X& a3 i' w2 d    END TRY
0 O& a3 j, V# \* D    BEGIN CATCH: u) |1 R+ A3 i: V- e) W
        //SELECT SOME ERROR0 \$ N4 h+ [. R' r' ~
    END CATCH( d+ I& N' s1 [5 h
    EXECUTE sp_xml_removedocument @currRecord2 n: `* W3 M7 S, ^& G& E4 e( o
xml看起来像这样5 ]0 e  c2 {% {4 Q

- z1 t' _* e# `. q& b) U( s' x  : A2 C& a0 p6 j; b  E  p
    a
/ U/ c8 p0 a( t$ G" b    b. K4 e% A- i8 S2 A3 R* O
    c    4 G7 b' e4 |$ L# I  a
  
& O9 C6 _0 a. z
  
8 V$ p; w8 M% Z7 p) m1 z    x8 \, M& z7 r/ Z; w
    y
4 z3 }$ Y1 S. i$ Y  y+ O- E& {    z8 }2 Q* c/ E9 G. J& x6 t. h
  

) o- Q6 r$ q% G  j
, D, F: [2 O+ c% `; o/ u
一切顺利。有时C1或C2或C3可以为空,这是我的问题:
7 S3 X% O+ p! {( P在该过程中,如果插入时C1为空或C2为空或C3为空,则跳过该记录而不进行插入8 @2 H2 r3 t' s
                5 J  P" m/ E# u9 b
解决方案:
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则