2014-07-17 1 views
0

SQL Server 버그가 있습니까? 또는이 SQL Server 버그가 무엇입니까? 벌크로드를 사용하면 다른 테이블의 외래 키인 필드에 대해 0이됩니다. 부모 테이블에 0 키가있는 레코드가 없습니다! Test.xsd로 저장이 내 스키마입니다SQLXMLBulkLoad의 오류

CREATE TABLE xmlAction(
    ActionID int IDENTITY(1,1) PRIMARY KEY, 
    ActionGUID nvarchar(50) NOT NULL); 
CREATE TABLE xmlDomain(
    DomainID int IDENTITY(1,1) PRIMARY KEY, 
    ActionID int NOT NULL FOREIGN KEY REFERENCES xmlAction(ActionID), 
    DomainName nvarchar(256) NOT NULL); 
CREATE TABLE xmlSid(
    SidID int IDENTITY(1,1) PRIMARY KEY, 
    SidString nvarchar(256) NOT NULL , 
    SidType nvarchar(50) NULL, 
    DomainID int NULL FOREIGN KEY REFERENCES xmlDomain(DomainID)); 
    CREATE UNIQUE INDEX UniqueSidString ON xmlSid(SidString); 
CREATE TABLE xmlGroup(
    GroupSidID int PRIMARY KEY FOREIGN KEY REFERENCES xmlSid(SidID), 
    GroupName nvarchar(256) NULL, 
    GroupComments nvarchar(512) NULL); 
CREATE TABLE xmlSidMembership(
    GroupSidID int NOT NULL FOREIGN KEY REFERENCES xmlGroup(GroupSidID), 
    SidString nvarchar(256) NOT NULL); 

:

다음은 데이터베이스의 테이블입니다

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:sql="urn:schemas-microsoft-com:mapping-schema"> 

    <xsd:annotation> 
    <xsd:appinfo> 
     <sql:relationship name="ActionDomain" 
     parent="xmlAction" 
     parent-key="ActionID" 
     child="xmlDomain" 
     child-key="ActionID" /> 
    </xsd:appinfo> 
    </xsd:annotation> 

    <xsd:annotation> 
    <xsd:appinfo> 
     <sql:relationship name="DomainComputer" 
     parent="xmlDomain" 
     parent-key="DomainID" 
     child="xmlComputer" 
     child-key="DomainID" /> 
    </xsd:appinfo> 
    </xsd:annotation> 

    <xsd:annotation> 
    <xsd:appinfo> 
     <sql:relationship name="DomainSid" 
     parent="xmlDomain" 
     parent-key="DomainID" 
     child="xmlSid" 
     child-key="DomainID" /> 
    </xsd:appinfo> 
    </xsd:annotation> 


    <xsd:annotation> 
    <xsd:appinfo> 
     <sql:relationship name="SidGroup" 
     parent="xmlSid" 
     parent-key="SidID" 
     child="xmlGroup" 
     child-key="GroupSidID" /> 
    </xsd:appinfo> 
    </xsd:annotation> 

    <xsd:annotation> 
    <xsd:appinfo> 
     <sql:relationship name="GroupMembership" 
     parent="xmlGroup" 
     parent-key="GroupSidID" 
     child="xmlSidMembership" 
     child-key="GroupSidID" /> 
    </xsd:appinfo> 
    </xsd:annotation> 



    <xsd:element name="Action" sql:relation="xmlAction" > 
    <xsd:complexType> 
     <xsd:sequence> 
     <xsd:element name="ActionGUID" type="xsd:string" /> 

     <xsd:element name="Domain" 
     sql:relation="xmlDomain" 
     sql:relationship="ActionDomain"> 
      <xsd:complexType> 
      <xsd:sequence> 
       <xsd:element name="DomainName" type="xsd:string" /> 

       <xsd:element name="Sid" 
       sql:relation="xmlSid" 
       sql:relationship="DomainSid"> 
       <xsd:complexType> 
        <xsd:sequence> 
        <xsd:element name="SidString" type="xsd:string" /> 
        <xsd:element name="SidType" type="xsd:string" /> 

        <xsd:element name="Group" 
        sql:relation="xmlGroup" 
        sql:relationship="SidGroup"> 
         <xsd:complexType> 
         <xsd:sequence> 
          <xsd:element name="GroupName" type="xsd:string" /> 
          <xsd:element name="GroupComments" type="xsd:string" /> 

          <xsd:element name="SidMembership" 
          sql:relation="xmlSidMembership" 
          sql:relationship="GroupMembership"> 
          <xsd:complexType> 
           <xsd:sequence> 
           <xsd:element name="SidString" type="xsd:string" /> 
           </xsd:sequence> 
          </xsd:complexType> 
          </xsd:element> 
         </xsd:sequence> 
         </xsd:complexType> 
        </xsd:element> 
        </xsd:sequence> 
       </xsd:complexType> 
       </xsd:element> 
      </xsd:sequence> 
      </xsd:complexType> 
     </xsd:element> 
     </xsd:sequence> 
    </xsd:complexType> 
    </xsd:element> 
</xsd:schema> 

을 그리고 이것은 test.xml의 파일로 저장, 샘플 XML입니다 :

012 :

<ROOT> 
    <Action> 
    <ActionGUID>MAction1</ActionGUID> 
    <Domain> 
     <DomainName>MDomain11</DomainName> 
     <Sid> 
     <SidString>SidString111</SidString> 
     <SidType>Group</SidType> 
     <SidName>Group111</SidName> 
     <Group> 
      <GroupName>Group1111</GroupName> 
      <GroupComments>This group belongs to actin1 domain 1 sid 1</GroupComments> 
      <SidMembership> 
      <SidString>SidString1121</SidString> 
      </SidMembership> 
      <SidMembership> 
      <SidString>SidString1121</SidString> 
      </SidMembership> 
      <SidMembership> 
      <SidString>SidString1131</SidString> 
      </SidMembership> 
     </Group> 
     </Sid> 

여기에 그것을 실행하기위한 코드입니다

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Xml; 
using System.IO; 
using System.Windows.Forms; 

namespace LoadXML 
{ 
    class Program 
    { 
     private const string ServerName = "Server"; 
     private const string DBName = "DB; 
     private const string UserName = "Username"; 
     private const string Password = "Password"; 
     private const string sPath = @"C:\Projects\LoadingXML\XMLFiles\"; 

     static void Main(string[] args) 
     { 
      BulkLoadXML("Test"); 
     } 


     static string CreatePath(string FileName, string extension) 
     { 
      return sPath + FileName + extension; 
     } 

     static void BulkLoadXML(string FileName) 
     { 
      try 
      { 
       SQLXMLBULKLOADLib.SQLXMLBulkLoad4 objBL = new SQLXMLBULKLOADLib.SQLXMLBulkLoad4(); 
       objBL.ConnectionString = @"Provider=sqloledb; server=" + ServerName + ";database=" + DBName + ";User ID=" + UserName + ";Password=" + Password + ";Connection Timeout=60"; 
       objBL.KeepIdentity = false; 
       objBL.Execute(CreatePath(FileName, ".xsd"), CreatePath(FileName, ".xml")); 
       MessageBox.Show("Uploaded" + " " + FileName); 
      } 
      catch (Exception e) 
      { 
       MessageBox.Show(e.ToString()); 
      } 
     } 
     } 
    } 
} 

xmlSidMembership에서 GroupSidID에 대해 0을 얻는 이유는 무엇입니까? 부모 테이블 xmlGroup에이 키가 없습니다! 감사합니다.

답변

0

는이 라인

<xsd:element name="Action" sql:relation="xmlAction" > 

전에 ROOT 노드 요소 설명

<xsd:element name="ROOT" sql:is-constant="1"> 
    <xsd:complexType> 
    <xsd:sequence> 

누락과 XSD의 하단에 태그를 닫는에 대해 잊지 마세요.