xmlのレコードを2つの異なるテーブルに挿入しようとしています。例えばXMLからの2つのSQLテーブルへの挿入関係の維持
<Root>
<A>
<AValue>value</AValue>
<Children>
<B>
<BValue>2</BValue>
</B>
</Children>
</A>
<A>
<AValue>value</AValue>
<Children>
<B>
<BValue>3</BValue>
</B>
</Children>
</A>
</Root>
について は同一と仮定すると も私はこの
を有する表BBID AID BValue
1 1 2
2 2 3
にレコードを挿入1
AID AValue
1 value
2 value
で開始され、テーブルにレコードを挿入します
DECLARE @idoc INT
DECLARE @doc NVARCHAR(MAX)
SET @doc = '
<Root>
<A>
<AValue>value</AValue>
<Children>
<B>
<BValue>2</BValue>
</B>
</Children>
</A>
<A>
<AValue>value</AValue>
<Children>
<B>
<BValue>3</BValue>
</B>
</Children>
</A>
</Root>
'
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc
CREATE TABLE #A
(
AID INT IDENTITY(1, 1) ,
AValue varchar(100)
)
INSERT INTO #A
SELECT *
FROM OPENXML (@idoc, '/Root/A',2)
WITH (AValue varchar(100)
)
CREATE TABLE #B
(
BID INT IDENTITY(1, 1) ,
AID INT ,
BValue INT
)
INSERT INTO #B
SELECT *
FROM OPENXML (@idoc, '/Root/A/Children/B',2)
WITH (
AID INT,
BValue INT
)
SELECT *
FROM #A
SELECT *
FROM #B
DROP TABLE #A
DROP TABLE #B
exec sp_xml_removedocument @idoc
ありがとう!
これはAValueを使用しています。私は、Aレコードの挿入から作成される主キーを使用したいと考えています。 – TrevDev
+1。 sp_xml_preparedocumentとメモリリークに関する良いアドバイス。 –
AValueが一意でない場合はどうなりますか? nodetype Aの各行を何とかループする必要がありますか? – TrevDev