Sql server TSQL XML使用XSD修改错误
你好 以下测试正在运行:Sql server TSQL XML使用XSD修改错误,sql-server,xml,tsql,xsd,Sql Server,Xml,Tsql,Xsd,你好 以下测试正在运行: DECLARE @XmlTest TABLE ( ID int, MyContent Xml ) declare @aaa XML set @aaa = '<Root><MyNode Qualifier="0" Code="AAA" Deleted="true">9.99</MyNode><MyNode Qualifier="0" Code="AAA" De
DECLARE @XmlTest TABLE
( ID int,
MyContent Xml
)
declare @aaa XML
set @aaa = '<Root><MyNode Qualifier="0" Code="AAA" Deleted="true">9.99</MyNode><MyNode Qualifier="0" Code="AAA" Deleted="false">10.99</MyNode></Root>'
insert into @XmlTest (ID, MyContent)
values(1,@aaa)
set @aaa = '<Root><MyNode Qualifier="0" Code="BBB" Deleted="false">9.99</MyNode></Root>'
insert into @XmlTest (ID, MyContent)
values(2,@aaa)
select * from @XmlTest
但是对于XSD,它不起作用。我有一个错误消息,如
Msg 2234、Niveau 16、爱达1、利昂19
XQuery[@XmlTest.MyContent.modify()]:运算符“=”不能应用于“”和“xs:string”
这是我的表的模式和新声明
DECLARE @XmlTest TABLE
( ID int,
MyContent Xml(CONTENT TestSchema)
)
DROP XML SCHEMA COLLECTION TestSchema
create xml schema collection TestSchema as
'<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
<xs:simpleType name="AmountType">
<xs:restriction base="xs:decimal">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="9999999999"/>
<xs:fractionDigits value="2"/>
</xs:restriction>
</xs:simpleType>
<xs:element name="Root" sql:is-constant="1">
<xs:complexType>
<xs:sequence>
<xs:element name="MyNode" maxOccurs="unbounded" minOccurs="1" sql:is-constant="1">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="AmountType">
<xs:attribute name="Qualifier" use="required">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="0"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="Code" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="15"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="Deleted" use="required">
<xs:simpleType>
<xs:restriction base="xs:boolean">
<xs:pattern value="true"/>
<xs:pattern value="false"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>'
DECLARE@XmlTest表
(ID int,
MyContent Xml(内容测试模式)
)
删除XML架构集合TestSchema
将xml架构集合TestSchema创建为
'
'
我尝试了此修改,但如果以同样的方式失败:
<xs:attribute type="xs:boolean" name="Deleted" use="required" />
提前感谢将已删除的定义更改为
<xs:attribute type="xs:boolean" name="Deleted" use="required" />
将已删除的定义更改为
<xs:attribute type="xs:boolean" name="Deleted" use="required" />
谢谢米凯尔的回复。我想我用“真”或“假”的限制误导了自己(不想接受0或1)。您的解决方案只有在我删除XSD中的限制(并且我不混合类型)时才有效。@DenisGilbert如果您只想要“true”和“false”,您应该使用xs:string作为基础。但是我认为你必须在比较和赋值中使用字符串。Ie您需要用true()将
更改为为“true”
谢谢Mikael的回复。我想我用“真”或“假”的限制误导了自己(不想接受0或1)。您的解决方案只有在我删除XSD中的限制(并且我不混合类型)时才有效。@DenisGilbert如果您只想要“true”和“false”,您应该使用xs:string作为基础。但是我认为你必须在比较和赋值中使用字符串。Ie您需要将使用true()的更改为使用“true”的
replace value of (/Root/MyNode[@Code="AAA" and @Deleted=false()]/@Deleted)[1]
with true()