日期:2014-05-18 浏览次数:20706 次
create XML SCHEMA COLLECTION TESTScheam as N'<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="EX">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="R" minOccurs="0" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence />
<xsd:attribute name="x1" type="xsd:int" />
<xsd:attribute name="x2" type="xsd:int" />
<xsd:attribute name="x3" type="xsd:int" />
<xsd:attribute name="x4" type="xsd:int" />
<xsd:attribute name="x5" type="xsd:int" />
<xsd:attribute name="x6" type="xsd:int" />
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="DATE" type="xsd:string" />
<xsd:attribute name="PERIOD" type="xsd:string" />
<xsd:attribute name="EXCHID" type="xsd:string" />
</xsd:complexType>
</xsd:element>
</xsd:schema>'
CREATE TABLE TEMP ([ID] INT IDENTITY(1,1),[XMLDATA] XML(TESTScheam))
INSERT INTO TEMP select
'<EX DATE="101221" PERIOD="00000100" EXCHID="STM09B2R12">
<R x1="1" x2="3600" x3="0" x6="0" />
<R x1="1" x2="3600" x3="0" x6="0" />
<R x1="1" x2="3600" x3="0" x6="0" />
</EX>'
union all select
'<EX DATE="101221" PERIOD="01000200" EXCHID="STM09B2R12">
<R x1="1" x2="3600" x3="0" x5="0" x6="0" />
<R x1="1" x2="3600" x3="0" x5="0" x6="0" />
<R x1="1" x2="3600" x3="0" x5="0" x6="0" />
<R x1="1" x2="3600" x3="0" x5="0" x6="0" />
</EX>'
union all select
'<EX DATE="101221" PERIOD="02000300" EXCHID="STM09B2R12">
<R x1="1" x2="0" x3="0" x4="0" x5="0" x6="0" />
<R x1="1" x2="0" x3="0" x4="0" x5="0" x6="0" />
<R x1="1" x2="0" x3="0" x4="0" x5="0" x6="0" />
<R x1="1" x2="0" x3="0" x4="0" x5="0" x6="0" />
<R x1="1" x2="0" x3="0" x4="0" x5="0" x6="0" />
</EX>'
--下面这句就可以执行
select T.C.value('(./@x1)[1]','varchar(250)') as 'ASLDUR',T.C.value('(./@x2)[1]','varchar(250)') as 'CHOVERS',
T.C.value('(./@x3)[1]','varchar(250)') as 'NSIFTR',T.C.value('(./@x4)[1]','varchar(250)') as 'SYS7IND',
T.C.value('(./@x5)[1]','varchar(250)') as 'LBUSDUR',T.C.value('(./@x6)[1]','varchar(250)') as 'LINHNO'
--,T.C.value('(../@EXCHID)[1]','varchar(250)') as 'EXCHID'
--,T.C.value('(../@DATE)[1]','varchar(250)') as 'DATE',
--T.C.value('(../@PERIOD)[1]','varchar(250)') as 'PERIOD'
from TEMP cross apply [XMLDATA].nodes('EX/R') T(C)
--去掉注析后就不行
select T.C.value('(./@x1)[1]','varchar(250)') as 'ASLDUR',T.C.value(