2012-05-10 20 views
1

I私はデータベースに挿入する次のXMLを持って、私は次のSQLSQL、XMLの挿入複数のノード

INSERT INTO test (startLocation,endLocation,mon,tue) 
SELECT 
X.product.query('startLocation').value('.', 'VARCHAR(255)'), 
X.product.query('endLocation').value('.', 'VARCHAR(255)'), 
X.product.query('Mon').value('.', 'VARCHAR(255)'), 
X.product.query('Tue').value('.', 'VARCHAR(255)') 
FROM (
SELECT CAST(x AS XML) 
FROM OPENROWSET(
BULK '#fileLocation#', 
SINGLE_BLOB) AS T(x) 
) AS T(x) 
CROSS APPLY x.nodes('latestjourneys/journey') AS X(product) 

私はこのコードを使用するだけstartLocationを使用しています

<latestjourneys> 
    <journey> 
     <startLocation>London</startLocation> 
     <endLocation>manchester</endLocation> 
     <leavingDay> 
      <mon>Yes</mon> 
      <tue>No</tue> 
     </leavingday> 
    <journey> 
    <journey> 
     <startLocation>Liverpool</startLocation> 
     <endLocation>Cardiff</endLocation> 
     <leavingDay> 
      <mon>Yes</mon> 
      <tue>No</tue> 
     </leavingday> 
    <journey> 
</latestjourneys> 

endLocationが挿入されます。 CROSS APPLYを変更すると

CROSS APPLY x.nodes('latestjourneys/journey/leavingDay') AS X(product) 

日が挿入されます。

私は両方のデータを挿入できる方法はありますか?私はSQLのXMLサポートと本当に慣れていないんだけど、私は願っています

X.product.value('/latestjourneys/journey/leavingDay') 

+0

** **データベースシステムとバージョンは何ですか? ** SQL **は多くのデータベースシステムで使用されている言語であるStructured Query Languageです - SQLは**データベース製品ではありません... XMLサポートのようなものはベンダー固有のものです。 ... –

+0

また、あなたのXMLは無効です - ''の終了タグは ''(大文字の問題!)でなければならず、 ''ノードはまったく閉じていません - 彼らの "閉じる"タグは再び ''です - うまくいきません... –

答えて

1

を使用すると、SQL Server 2005またはそれ以降を使用している場合 - あなたはこのようなものを使用することができます

SELECT 
    StartLocation = Journey.value('(startLocation)[1]', 'varchar(50)'), 
    EndLocation = Journey.value('(endLocation)[1]', 'varchar(50)'), 
    LeaveMon = Leaving.value('(mon)[1]', 'varchar(10)'), 
    LeaveTue = Leaving.value('(tue)[1]', 'varchar(10)') 
FROM 
    X.nodes('/latestjourneys/journey') AS Nodes(Journey) 
CROSS APPLY 
    Journey.nodes('leavingDay') AS Subnode(Leaving) 

基本的には、最初の.nodes()呼び出しはあなたのリストを与えますすべての<journey>要素 - 次に、それぞれの要素からを再度呼び出して、<leavingDay>サブノードのすべての要素を取得する必要があります。

+1

これは本当に私を助けました。どうもありがとう –

0

宣言@tempテーブル(ID int型、GUID UNIQUEIDENTIFIER)

はXMLとして@XMlDataを宣言する。

セットが@XMlData = @tempに

挿入 'ここにあなたのXMLを貼り付け'(ID、GUID)XTbl.Cats.valueをSELECT( ''、 'INT')@XMlData FROM、NEWIDを()。ノード( '/ユーザ/ユーザ')XTbl(ネコ)AS

が@temp

出力SELECT * FROM:

のID GUID 10 12FF8543-D98C-4CF3-BA0B-CD4CFEF5A0C3 20 F6244519- F40E-4E28-9C91-5832E7F45A70 30 6775BED5-1127-4D 8E-88D2-ECE9CED55056

関連する問題