私はXML要素内の値を変更する必要がある - この型なしバージョンでは、このように動作します:SQL Server:複雑なXML要素の値を変更することは可能ですか?
declare @X xml=
'<translations>
<value lang="en-US">example</value>
<value lang="de-DE">Beispiel</value>
</translations>';
set @X.modify('replace value of (/translations/value[@lang="en-US"]/text())[1] with "replacedValue"');
select @X.value('(/translations/value[@lang="en-US"])[1]','varchar(max)');
属性LANG = "EN-USと「値」要素の選択リターン「replacedValue」 "読みやすくするために
CREATE XML SCHEMA COLLECTION [dbo].[LocaleSchema] AS N'<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"><xsd:element name="translations"><xsd:complexType><xsd:complexContent><xsd:restriction base="xsd:anyType"><xsd:sequence minOccurs="0" maxOccurs="unbounded"><xsd:element name="value"><xsd:complexType><xsd:simpleContent><xsd:extension base="xsd:string"><xsd:attribute name="lang" type="language" /></xsd:extension></xsd:simpleContent></xsd:complexType></xsd:element></xsd:sequence></xsd:restriction></xsd:complexContent></xsd:complexType></xsd:element><xsd:simpleType name="language"><xsd:restriction base="xsd:string"><xsd:enumeration value="de-DE" /><xsd:enumeration value="en-US" /></xsd:restriction></xsd:simpleType></xsd:schema>'
その後のみXMLスキーマはかなり印刷:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="translations">
<xsd:complexType>
<xsd:complexContent>
<xsd:restriction base="xsd:anyType">
<xsd:sequence minOccurs="0" maxOccurs="unbounded">
<xsd:element name="value">
<xsd:complexType>
<xsd:simpleContent>
<xsd:extension base="xsd:string">
<xsd:attribute name="lang" type="language" />
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
<xsd:simpleType name="language">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="de-DE" />
<xsd:enumeration value="en-US" />
</xsd:restriction>
</xsd:simpleType>
</xsd:schema>
は、残念ながら、私は、次のXMLスキーマが入力され、データベース内のXML属性のためにこれをしなければなりません
「value」というXML要素は、複合型です。ドキュメントによると、modify()関数は単純型に対してのみ有効です。
declare @X xml (CONTENT [dbo].[LocaleSchema])=
'<translations>
<value lang="en-US">example</value>
<value lang="de-DE">Beispiel</value>
</translations>';
set @X.modify('replace value of (/translations/value[@lang="en-US"]/text())[1] with "replacedValue"');
があります:変更しようとするとエラーが発生する - だから、その後の型指定されたコンテンツの上からSQL文
(また、ほかのテキスト()関数は、単純型に対してのみ有効です)回避策?あるいは、XML属性を変更する他の可能性はありますか? (私は実際の生活の中でUPDATEステートメントでこれを使用する必要があります)
ありがとうございます!
ストアリレーショナル形式の代わりに、XMLでデータ? – RichardCL
XMLフィールドを型なしのXML変数に読み込み、変更してテーブルを更新しますか?これは、特にXMLインデックスを更新する必要がある場合は非常に非効率的です。 – RichardCL