SQLXMLBULKLOAD赢得';我不能使用我的XSD
这是由于这种关系造成的,这种关系似乎不受支持: 我无法更改XML的格式,因为它来自第三方。其XML中有两个部分包含RateRegister,例如:SQLXMLBULKLOAD赢得';我不能使用我的XSD,xml,xsd,sqlxml,Xml,Xsd,Sqlxml,这是由于这种关系造成的,这种关系似乎不受支持: 我无法更改XML的格式,因为它来自第三方。其XML中有两个部分包含RateRegister,例如: <wse:ImportRateRegisters> <wse:RateRegister Tier="0" Cumulative="3213.500" Advance="60.900" /> <wse:RateRegister Tier="1" Cumulative="193.950" Advance="59.7
<wse:ImportRateRegisters>
<wse:RateRegister Tier="0" Cumulative="3213.500" Advance="60.900" />
<wse:RateRegister Tier="1" Cumulative="193.950" Advance="59.700" />
</wse:ImportRateRegisters>
<wse:ImportTierRegisters>
<wse:RateRegister Tier="0" Cumulative="3251.600" />
<wse:RateRegister Tier="1" Cumulative="351.000" />
</wse:ImportTierRegisters>
如果我尝试添加这两个关系,我会得到一个重复的属性错误
我在这里浪费时间了吗,SQLXMLBULKLOAD实用程序能处理这种层次结构吗?我终于成功地实现了这一点,因此我将发布我的答案,希望它能帮助其他人解决类似的问题。我不相信这是最好的解决方案,因为它最终会创建我并不真正想要的“链接表”,但它确实有效 在数据库中,我创建表来保存结构的这一部分:
CREATE TABLE ImportRateRegisters (
RRegisterId INT IDENTITY(1,1) PRIMARY KEY,
DeviceId INT FOREIGN KEY REFERENCES Device(DeviceId));
CREATE TABLE ImportTierRegisters (
TRegisterId INT IDENTITY(1,1) PRIMARY KEY,
DeviceId INT FOREIGN KEY REFERENCES Device(DeviceId));
CREATE TABLE RRateRegister (
Tier INT,
Cumulative NUMERIC(19,2),
Advance NUMERIC(19,2),
RRegisterId INT FOREIGN KEY REFERENCES ImportRateRegisters(RRegisterId));
CREATE TABLE TRateRegister (
Tier INT,
Cumulative NUMERIC(19,2),
Advance NUMERIC(19,2),
TRegisterId INT FOREIGN KEY REFERENCES ImportTierRegisters(TRegisterId));
首先,我需要为RateRegister创建一个元素,将它连接到RRateRegister或TRAterRegister表,我在XSD中进一步覆盖它,但我需要在这里有一些内容作为占位符,否则批量加载时会出错
<xs:element name="RateRegister" msdata:Prefix="wse" sql:relation="RRateRegister" sql:relationship="RRateRegisterToImportRateRegisters">
<xs:complexType>
<xs:attribute name="Tier" form="unqualified" type="xs:string" sql:field="Tier" />
<xs:attribute name="Cumulative" form="unqualified" type="xs:string" sql:field="Cumulative" />
<xs:attribute name="Advance" form="unqualified" type="xs:string" sql:field="Advance" />
</xs:complexType>
</xs:element>
当我谈到核心XSD中导致问题的部分时,我会返回到通用RateRegister,但会覆盖关系/关系:
<xs:element name="ImportRateRegisters" msdata:Prefix="wse" minOccurs="0" maxOccurs="unbounded" sql:relation="ImportRateRegisters" sql:relationship="ImportRateRegistersToDevice">
<xs:complexType>
<xs:sequence>
<xs:element ref="RateRegister" minOccurs="0" maxOccurs="unbounded" sql:relation="RRateRegister" sql:relationship="RRateRegisterToImportRateRegisters"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="ImportTierRegisters" msdata:Prefix="wse" minOccurs="0" maxOccurs="unbounded" sql:relation="ImportTierRegisters" sql:relationship="ImportTierRegistersToDevice">
<xs:complexType>
<xs:sequence>
<xs:element ref="RateRegister" minOccurs="0" maxOccurs="unbounded" sql:relation="TRateRegister" sql:relationship="TRateRegisterToImportTierRegisters" />
</xs:sequence>
</xs:complexType>
</xs:element>
…就这样。当我加载数据时,它会被推送到正确的RateRegister表中,并且所有数据似乎都正确地链接在一起
CREATE TABLE ImportRateRegisters (
RRegisterId INT IDENTITY(1,1) PRIMARY KEY,
DeviceId INT FOREIGN KEY REFERENCES Device(DeviceId));
CREATE TABLE ImportTierRegisters (
TRegisterId INT IDENTITY(1,1) PRIMARY KEY,
DeviceId INT FOREIGN KEY REFERENCES Device(DeviceId));
CREATE TABLE RRateRegister (
Tier INT,
Cumulative NUMERIC(19,2),
Advance NUMERIC(19,2),
RRegisterId INT FOREIGN KEY REFERENCES ImportRateRegisters(RRegisterId));
CREATE TABLE TRateRegister (
Tier INT,
Cumulative NUMERIC(19,2),
Advance NUMERIC(19,2),
TRegisterId INT FOREIGN KEY REFERENCES ImportTierRegisters(TRegisterId));
<xs:element name="RateRegister" msdata:Prefix="wse" sql:relation="RRateRegister" sql:relationship="RRateRegisterToImportRateRegisters">
<xs:complexType>
<xs:attribute name="Tier" form="unqualified" type="xs:string" sql:field="Tier" />
<xs:attribute name="Cumulative" form="unqualified" type="xs:string" sql:field="Cumulative" />
<xs:attribute name="Advance" form="unqualified" type="xs:string" sql:field="Advance" />
</xs:complexType>
</xs:element>
<xs:element name="ImportRateRegisters" msdata:Prefix="wse" minOccurs="0" maxOccurs="unbounded" sql:relation="ImportRateRegisters" sql:relationship="ImportRateRegistersToDevice">
<xs:complexType>
<xs:sequence>
<xs:element ref="RateRegister" minOccurs="0" maxOccurs="unbounded" sql:relation="RRateRegister" sql:relationship="RRateRegisterToImportRateRegisters"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="ImportTierRegisters" msdata:Prefix="wse" minOccurs="0" maxOccurs="unbounded" sql:relation="ImportTierRegisters" sql:relationship="ImportTierRegistersToDevice">
<xs:complexType>
<xs:sequence>
<xs:element ref="RateRegister" minOccurs="0" maxOccurs="unbounded" sql:relation="TRateRegister" sql:relationship="TRateRegisterToImportTierRegisters" />
</xs:sequence>
</xs:complexType>
</xs:element>