2017-08-10 26 views
0

私はこのような値を持つSQL Serverデータベース内XMLUserDetails持っている:私は、DBから読み込まれ、SQLクエリを使用してXML値を編集するには?

<UserSettings name="A2"> . 

に新しい設定を追加する

<fleet> 
    <Setting name="city"/> 
    <UserSettings name="details"> 
     <UserSettings name="A1"> 
      <setting type="1" name="email"/> 
      <setting value="user"/> 
     </UserSettings> 
     <UserSettings name="A2"> 
      <setting type="2" name="phone"/> 
      <setting value="technician"/> 
     </UserSettings> 
    </UserSettings>  
</fleet> 

を誰かが私を指すことができます私は何をすべきか?

+1

[ここでは、開始するには良い場所である](https://docs.microsoft.com/en-us/sql/をt-sql/xml/modify-method-xml-data-type) –

答えて

2

あなたはsql:variable()にを使用する場合がありますあなたが外部で作成した価値を紹介してください。そして、あなたは前にこの新しいエントリを持っていないXMLSを見つけるためにXml.exist()を使用することができます。

DECLARE @myTbl TABLE(Descr VARCHAR(100),TheXml XML);    
INSERT INTO @myTbl VALUES 
( 
'Setting "A3" doesn''t exist','<fleet> 
    <Setting name="city" /> 
    <UserSettings name="details"> 
     <UserSettings name="A1"> 
      <setting type="1" name="email" /> 
      <setting value="user" /> 
     </UserSettings> 
     <UserSettings name="A2"> 
      <setting type="2" name="phone" /> 
      <setting value="technician" /> 
     </UserSettings> 
    </UserSettings> 
</fleet>' 
) 
,( 
'Setting "A3" exists already','<fleet> 
    <Setting name="city" /> 
    <UserSettings name="details"> 
     <UserSettings name="A1"> 
      <setting type="1" name="email" /> 
      <setting value="user" /> 
     </UserSettings> 
     <UserSettings name="A2"> 
      <setting type="2" name="phone" /> 
      <setting value="technician" /> 
     </UserSettings> 
     <UserSettings name="A3"> 
      <setting type="3" name="A3 setting" /> 
      <setting value="this exists already" /> 
     </UserSettings> 
    </UserSettings> 
</fleet>' 
); 

DECLARE @NewSetting XML= 
     N'<UserSettings name="A3"> 
      <setting type="3" name="new A3" /> 
      <setting value="new data" /> 
     </UserSettings>'; 


UPDATE @myTbl 
SET TheXml.modify('    
insert sql:variable("@NewSetting") 
as last into (/fleet/UserSettings)[1]')   
WHERE TheXml.exist(N'/fleet/UserSettings[@name="details"]/UserSettings[@name="A3"]')=0; 

SELECT * FROM @myTbl  
1

SQL SERVERは、XMLデータとそれを行う言語(XML DML)のメソッドを提供します。
insert xml dmlステートメントでmodifyメソッドを使用する必要があります。ここで

は完全な例である:

サンプルデータ:

DECLARE @myDoc xml;    
SET @myDoc = 
'<fleet> 
    <Setting name="city" /> 
    <UserSettings name="details"> 
     <UserSettings name="A1"> 
      <setting type="1" name="email" /> 
      <setting value="user" /> 
     </UserSettings> 
     <UserSettings name="A2"> 
      <setting type="2" name="phone" /> 
      <setting value="technician" /> 
     </UserSettings> 
    </UserSettings> 
</fleet>'; 

声明:

SET @myDoc.modify('    
insert <setting value="NEW SETTINGS" /> 
as first into (/fleet/UserSettings/UserSettings[@name="A2"])[1] ') ;   
SELECT @myDoc;   

結果:

<fleet> 
    <Setting name="city" /> 
    <UserSettings name="details"> 
     <UserSettings name="A1"> 
      <setting type="1" name="email" /> 
      <setting value="user" /> 
     </UserSettings> 
     <UserSettings name="A2"> 
      <setting value="NEW SETTINGS" /> 
      <setting type="2" name="phone" /> 
      <setting value="technician" /> 
     </UserSettings> 
    </UserSettings> 
</fleet> 
+0

説明ありがとうございます。xmlとして列の値を取得できない場合は、新しい設定を挿入できませんか? ... – user1687824

+0

私はそこにいると思いますが、私はどのようにわかりません。あなたの質問に答えたのは、主にSQL ServerのXMLサポートについてもっと学ぶ機会だったからです。コメントと回答の両方で私があなたに与えたリンクを使って、私のように学びましょう。 –

関連する問題