Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQLXMLBULKLOAD赢得';我不能使用我的XSD_Xml_Xsd_Sqlxml - Fatal编程技术网

SQLXMLBULKLOAD赢得';我不能使用我的XSD

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

这是由于这种关系造成的,这种关系似乎不受支持:

我无法更改XML的格式,因为它来自第三方。其XML中有两个部分包含RateRegister,例如:

<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>