Что является аналогом Oracle Xmltable в SQL Server? - PullRequest
0 голосов
/ 21 декабря 2018

Необходимо перенести этот процесс Oracle на 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 следует добавить префикс @, а CLOB может быть varchar(max).rowset и row являются объектами C # System.Xml.Linq.XElement, поэтому имеют вид

<rowset ...>
  <row .../>
  ...
</rowset>

1 Ответ

0 голосов
/ 21 декабря 2018

Предполагается, что ваш 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...