修改现有 XML 架构集合



我有一个XML列的架构集合关联。我想将子元素添加到架构集合中的现有父元素。

我正在尝试在不删除架构关联的情况下实现这一点,因为具有该列的表包含数据,并且在删除关联时会受到限制。

架构如下所示

create xml schema collection dbo.Book
as
N'<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="Books">
<xsd:complexType>
<xsd:sequence>
<xsd:element type="xsd:string" name="AuthorFirstName" maxOccurs="unbounded" minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>';
go

现在我想在父元素(Books(内再添加一个子元素,像这样

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="Books">
<xsd:complexType>
<xsd:sequence>
<xsd:element type="xsd:string" name="AuthorFirstName" maxOccurs="unbounded" minOccurs="0"/>
<xsd:element type="xsd:string" name="AuthorLastName" maxOccurs="unbounded" minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>

有什么解决方案可以在不删除 XML 架构集合的情况下对其进行更改?

SQL Server在这里稍微限制了你。它不允许修改现有 XML 架构集合中现有命名空间中的现有元素。但是,如果架构命名空间设计为可扩展,则可以向现有 XML 架构集合添加更多命名空间。

考虑以下内容,它定义了一个可扩展的"Books V1"命名空间,然后通过"Books V2"命名空间添加一个新元素......

create xml schema collection dbo.Book as
N'<xs:schema targetNamespace="http://tempuri.org/Books-v1"
xmlns="http://tempuri.org/Books-v1"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
<xs:element name="Books">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="AuthorFirstName" minOccurs="0" maxOccurs="unbounded"/>
<xs:any namespace="##other" minOccurs="0" processContents="lax"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>';
go
alter xml schema collection dbo.Book add
N'<xs:schema targetNamespace="http://tempuri.org/Books-v2"
xmlns="http://tempuri.org/Books-v2"
xmlns:xs="http://www.w3.org/2001/XMLSchema"  
elementFormDefault="qualified">
<xs:element type="xs:string" name="AuthorLastName"/>
</xs:schema>';
go
declare @Book1 xml(dbo.Book) =
N'<Books xmlns="http://tempuri.org/Books-v1">
<AuthorFirstName>John</AuthorFirstName>
</Books>';
declare @Book2 xml(dbo.Book) =
N'<Books xmlns="http://tempuri.org/Books-v1" xmlns:v2="http://tempuri.org/Books-v2">
<AuthorFirstName>John</AuthorFirstName>
<v2:AuthorLastName>Smith</v2:AuthorLastName>
</Books>';
select @Book1;
select @Book2;
go
drop xml schema collection dbo.Book;
go

相关内容

  • 没有找到相关文章

最新更新