回答

收藏

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

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

我有此存储过程,该过程从xml读取数据并进行一些插入- h( B4 v$ N$ Q
ALTER procedure [dbo].[SP_InsertIOs]
3 e1 i/ }/ G, d; }/ v    @iosxml xml AS5 I# L. F6 w4 W/ G* H
DECLARE @currRecord int5 K6 H* N: i9 d5 ?
-- parse the records from the XML
9 j# e1 f/ n( n. i' F  EXECUTE sp_xml_preparedocument @currRecord OUTPUT, @iosxml     " @3 ^/ n2 o" t
  BEGIN TRY       * A& d7 p- [' s+ n
   INSERT INTO SN_IO ( [C1] ,[C2]  ,[C3] )1 Z" I- M3 p0 ?
   SELECT [C1] ,[C2] ,[C3]
( ]1 `2 K8 {9 m0 C6 v+ }   FROM OPENXML (@currRecord, 'ios/io', 1)! g; d. ]. q7 s; q; f
   WITH ([C1] [varchar](25)       'C1',
! z7 P* J3 I- k" `% p         [C2] [varchar](25)       'C2',
, J0 l! K6 v- U+ a5 S         [C3] [varchar](20)       'C3'  )                                                                  + l% B% C9 X( C
    END TRY
. B& C) ^5 `8 R+ r  _) I6 G    BEGIN CATCH
: S+ s3 P0 k  }' o        //SELECT SOME ERROR$ b) u) V% }; n6 w9 P% m
    END CATCH
# w( c. I  k& E+ V* Z' p    EXECUTE sp_xml_removedocument @currRecord0 Q: v0 X: c( d- ~# e# M
xml看起来像这样
  G8 s5 C4 H! A1 |3 E. A. B9 q8 C+ K
  % ^( I- A% `6 R7 ^+ p2 ]+ D
    a3 r, R$ |6 ~" b
    b- [! r( a! P& Z! `
    c   
9 d0 G( X* E; A$ y, F  

+ s; `2 q- L2 F' \  ?* ~" _  ( [; D. S# i! y! V
    x
' E+ A& f+ P& }- |! u8 y' ~    y
8 Z5 t5 R5 Q: F/ D; m" j' Z3 k+ H    z/ D9 y! {& z2 v: _7 [, N, ~! B
  

0 _0 p& C3 h) g2 w, e9 q9 m5 H$ U$ H

  Q0 O1 O9 \: F一切顺利。有时C1或C2或C3可以为空,这是我的问题:
' s+ W) V' G9 h* c) n在该过程中,如果插入时C1为空或C2为空或C3为空,则跳过该记录而不进行插入
6 B* D3 k' u: N/ E: N                # t5 W8 N, r4 `1 U5 O
解决方案:
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则