Oracle在SQL Server中的Xmltable对应什么?

时间:2018-12-21 01:43:01

标签: sql-server xml oracle

需要将此Oracle proc迁移到具有相同表结构的SQL Server。

CREATE OR REPLACE procedure app1.MyBulkUpdate
(
   P_Arr IN CLOB
)
AS
BEGIN

INSERT INTO someone.OracleTable(DeptID, DeptName) 
    SELECT ValueID, ValueName
      FROM XMLTable('for $i in /rowset/row return $i'
                      passing xmltype.createxml(P_Arr) columns
                         DeptID VARCHAR2(200) path 'DeptID',
                         DeptName VARCHAR2(200) path 'DeptName'
                    ) x;
END;

图中的P_Arr应该以{{1​​}}为前缀,而@可以是CLOBvarchar(max)rowsetrow的C#对象,就像

System.Xml.Linq.XElement

1 个答案:

答案 0 :(得分:1)

假设您的XML看起来像这样

<rowset>
    <row>
        <DeptID>1005</DeptID>
        <DeptName>Some Department Name</DeptName>
    </row>
    <row>
        <DeptID>1099</DeptID>
        <DeptName>Another Department Name</DeptName>
    </row>
</rowset>

存储过程

CREATE PROCEDURE [dbo].[prc_MyBulkUpdate](@XML xml) 

As

Begin
    Set NoCount On;

    Insert Into [dbo].[SomeTable] (DeptID,DeptName)
    Select DeptID   = x.n.value('DeptID[1]','varchar(50)')
          ,DeptName = x.n.value('DeptName[1]','varchar(150)')
     From  @XML.nodes('rowset/row/.') x(n)

End

要执行

Exec [dbo].[prc_MyBulkUpdate] @XML