sql—将数据从xml读入临时表

35g0bw71  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(298)

我有一些代码可以从xml创建临时表:

INSERT INTO @tblPostitions(PosId,OtherId,Status)
SELECT 
T.P.value('(PosId)[1]','INT'),
T.P.value('(OtherId)[1]','INT'),
T.P.value('(Status)[1]','TINYINT'),
FROM @XML.nodes('General/Positions/Position') AS T(P)

它就像一个循环。
我有这种情况。我希望在中创建新行时更改该值 @tblPostitions 什么时候 Status = 1 ,更改为 2 如果不同,保持不变
xml格式:

<General>
  <Positions>
      <Position>
          <PosId>1</PosId>
          <OtherId>2</OtherId>
          <Status>1</Status>
      </Position>
      <Position>
          <PosId>2</PosId>
          <OtherId>3</OtherId>
          <Status>2</Status>
      </Position>
      <Position>
          <PosId>3</PosId>
          <OtherId>6</OtherId>
          <Status>1</Status>
      </Position>
  </Positions>
</General>
gjmwrych

gjmwrych1#

我们可以用iif

INSERT INTO @tblPostitions(PosId, OtherId, Status)
SELECT 
    T.P.value('(PosId)[1]','INT'),
    T.P.value('(OtherId)[1]','INT'),
    IIF(T.P.value('(Status)[1]','TINYINT') = 1, 2, T.P.value('(Status)[1]','TINYINT'))
FROM @XML.nodes('General/Positions/Position') AS T(P)
dddzy1tm

dddzy1tm2#

这里与临时表或xml无关。它只是根据一个条件选择不同的值。
为了使它容易理解,我宁愿用 Case 跟随:

Select PosId,OtherId,
    Case When StatusId = 1 then 2 Else StatusId End as [Status]
 from
(
    SELECT 
    T.P.value('(PosId)[1]','INT') as PosId,
    T.P.value('(OtherId)[1]','INT') as OtherId,
    T.P.value('(Status)[1]','TINYINT') as StatusId
    FROM @XML.nodes('General/Positions/Position') AS T(P)
) Q

相关问题