私は、1つのテーブルに別のテーブルでALLLEDGERENTRIES.LIST
詳細をバウチャーの詳細を保存しています以下の複雑なXMLSQL Serverで複雑なXMLSのためのOpenXML()を使用する方法2005
<Collection>
<VOUCHER>
<DATE TYPE="Date">20110401</DATE>
<NARRATION TYPE="String">MUNNA CONVENT ROAD</NARRATION>
<VOUCHERTYPENAME>RETAIL</VOUCHERTYPENAME>
<VOUCHERNUMBER>R-2-I2-9-6-27751</VOUCHERNUMBER>
<ALLLEDGERENTRIES.LIST>
<LEDGERNAME>U.S.T. CANTEEN</LEDGERNAME>
<AMOUNT>-2678.9985</AMOUNT>
</ALLLEDGERENTRIES.LIST>
<ALLLEDGERENTRIES.LIST>
<LEDGERNAME>U.S.T. CANTEEN</LEDGERNAME>
<AMOUNT>-2678.9985</AMOUNT>
</ALLLEDGERENTRIES.LIST>
</VOUCHER>
<VOUCHER>
<DATE TYPE="Date">20110401</DATE>
<NARRATION TYPE="String">MUNNA CONVENT ROAD</NARRATION>
<VOUCHERTYPENAME>RETAIL</VOUCHERTYPENAME>
<VOUCHERNUMBER>R-2-I2-9-6-27751</VOUCHERNUMBER>
<ALLLEDGERENTRIES.LIST>
<LEDGERNAME>U.S.T. CANTEEN</LEDGERNAME>
<AMOUNT>-2678.9985</AMOUNT>
</ALLLEDGERENTRIES.LIST>
<ALLLEDGERENTRIES.LIST>
<LEDGERNAME>U.S.T. CANTEEN</LEDGERNAME>
<AMOUNT>-2678.9985</AMOUNT>
</ALLLEDGERENTRIES.LIST>
</VOUCHER>
</Collection>
を持っています。
どちらのテーブルもVoucherID
の関係にあります。特定のVoucherID
については、関連するx3値を格納する必要があります。私のストアドプロシージャで私はopenxml()
を使用しています。私のSPの
ワンピース:
INSERT INTO SalesVoucher(AbsID,VoucherNumber,VoucherTypeName,Narration,VoucherDate)
SELECT @AID,VOUCHERNUMBER,VOUCHERTYPENAME,NARRATION,CAST(DATE AS DATETIME)
FROM OPENXML(@XMLHandle,'ENVELOPE/BODY/DATA/COLLECTION/VOUCHER',3)
WITH (
VOUCHERNUMBER nVarchar(200),VOUCHERTYPENAME varchar(100),NARRATION varchar(500),DATE DATETIME
)
SELECT @[email protected]@IDENTITY
INSERT INTO SalesLedger(VoucherID,LedgerName,Amount)
SELECT @VID,LEDGERNAME,AMOUNT
FROM OPENXML(@XMLHandle,'ENVELOPE/BODY/DATA/COLLECTION/VOUCHER/ALLLEDGERENTRIES.LIST',3)
WITH(
LEDGERNAME varchar(200),AMOUNT decimal(18,0)
)
すべての値がDBに保存されているが、SalesLedger
テーブルの列VoucherID
は、すべての行に対して同じである(それはいけない...)私はそれが最後に戻っている@@IDENTITY
を使用してアイデンティティ価値のみ。
誰かが私はおそらくこれを行うには、SQL ServerのネイティブのXQueryの機能を使用することになり
「」サブノードが両方とも**同一であることは間違いですか?もう一度まったく同じノードに出会ったらどうしますか?データを2回挿入しますか? –