オプションのサイト情報をXMLフィールドに格納するアプリケーションがあります。
サンプルテーブル:
CREATE TABLE [dbo].[Sites](
[SiteID] [int] IDENTITY(1,1) NOT NULL,
[SiteName] [nvarchar](80) NULL,
[SiteInfo] [xml] NULL );
INSERT INTO [dbo].[Sites] ([SiteName]) VALUES ('TestSite1') ;
属性が適用されない場合、XMLフィールドはNULLです。これらの属性のいずれかが適用される場合、アプリケーションはXMLドキュメントと関連ノードを挿入します。
有効な例は次のようになります。
<SiteInfo>
<BoreID>ABC123</BoreID>
<ConsentCompliance>true</ConsentCompliance>
</SiteInfo>
別のシステムから一部のデータを移行する必要があるため、このフィールド/ XMLにデータを挿入しようとしています。これまでのところ、私の試みは、アプリが気に入らないシングルトンノードをもたらしました。
私がウェブで見つけたいくつかの例を使用して、私は以下を試しました:
update [dbo].[Sites]
SET [SiteInfo].modify('insert <Anothernode>ABC123</Anothernode> into (/SiteInfo)')
where Siteid = 1
これは次のエラーをスローします:
メッセージ2226、レベル16、状態1、行1 XQuery [dbo.Sites.SiteInfo.modify()]: 'insert'のターゲットは単一のノードでなければならず、 'element(SiteInfo、xdt:untyped)*'が見つかりました
質問:
For example: <BoreID>ABC123</BoreID> vs a single side <BoreID=ABC123/>
乾杯
ピート
答え:
update [dbo].[Sites] SET [SiteInfo] = '<SiteInfo />'
[1]を使用して最初のSiteInfoノードを指定するだけです
update [dbo].[Sites]
SET [SiteInfo].modify('insert <Anothernode>ABC123</Anothernode> into (/SiteInfo[1])')
where Siteid = 1