需要将此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}}为前缀,而@
可以是CLOB
。 varchar(max)
和rowset
是row
的C#对象,就像
System.Xml.Linq.XElement
答案 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