2017-09-19 7 views
0

작동하지 않습니다 제 3 자로부터. 예를 들어, RateRegister를 포함하는 자신의 XML에서 두 개의 섹션이 있습니다 SQLXMLBULKLOAD이 지원하지 않는 것으로이 관계로 인해 내 XSD

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

내가 끼 었어이 관계를 지원하는 XSD 주석을 시도

. ImportRateRegisters/ImportTierRegisters와 Device 사이의 관계를 정의 할 수 있지만 RateRegister를 믹스에 추가하자 마자 작동이 멈 춥니 다.

RateRegister의 관계를 ImportRateRegisters 또는 ImportTierRegisters 중 하나에 추가 할 수 있지만 동시에 둘 다 설정할 수는 없습니다.

<sql:relationship name="RateRegisterToImportRateRegisters" parent="ImportRateRegisters" parent-key="ImportRateRegisters_Id" child="RateRegister" child-key="ImportRateRegisters_Id" /> 
<sql:relationship name="RateRegisterToImportTierRegisters" parent="ImportTierRegisters" parent-key="ImportTierRegisters_Id" child="RateRegister" child-key="ImportTierRegisters_Id" /> 

을하지만이 RateRegister에 도착하면 나는 단지 예를 들어, 이러한 관계 중 하나를 추가 할 수 있습니다 : 둘 다 관계를 만들

<xs:element name="RateRegister" msdata:Prefix="wse" sql:relation="RateRegister" sql:relationship="RateRegisterToImportRateRegisters"> 

나는이 함께 얻는 오류입니다 :

Schema: the parent/child table of the relationship on 'RateRegister' does not match 

두 관계를 모두 추가하면 중복 된 속성 오류가 발생합니다.

여기서 시간을 낭비하고 있습니까? SQLXMLBULKLOAD 유틸리티는 이러한 종류의 계층 구조에도 대처할 수 있습니까?

답변

0

나는 마침내이 작업을 할 수있게되었으므로 비슷한 대답으로 다른 사람에게 도움이 될 것이라는 희망으로 답변을 게시 할 예정입니다. 나는 그것이 정말로 원하지 않는 "링크 테이블"을 만드는 것을 끝내기 때문에 이것이 최선의 해결책이라고 확신하지는 않지만 작동한다. 나는 구조의이 부분을 잡고 테이블을 만들 데이터베이스에

다음 RRateRegister 또는 TRateRegister 테이블 중 하나에 접선

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에 대한 요소를 만들 필요를, 나는 이것을 오버라이드 (override) XSD에서 더 아래쪽으로 이동하지만 자리 표시 자로 여기에 무엇인가가 있어야합니다. 그렇지 않으면 대량로드시 오류가 발생합니다.

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

... 그리고 그게 관하여 :

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

내가 다시 일반 RateRegister에 참조 문제를 일으킨 핵심 XSD에서 파트에 와서, 그러나 관계/관계를 오버라이드 (override)

. 데이터를로드하면 올바른 RateRegister 테이블로 푸시되고 모든 데이터가 올바르게 링크 된 것처럼 보입니다.