2010-08-30 4 views
0

Je suis un utilisateur BCP pour la première fois. J'ai un fichier XML que j'ai besoin d'importer dans une nouvelle table dans SQL Server. Cela utilise SQL Server 2008 et BCP version 10.50.16. J'ai lu la documentation mais j'ai eu 370 000 erreurs! (Ceci est un très gros fichier). Lorsque j'ouvre le journal des erreurs, je vois juste un tas de points d'interrogation.Corriger la syntaxe BCP

À propos de ce fichier XML: il utilise une nouvelle ligne pour délimiter les lignes, mais il utilise le caractère espace pour séparer les champs. Donc, je ne suis pas sûr si c'est ce qui l'a fait échouer. Le message d'échec est:

Copie BCP en échecJe voudrais qu'il soit plus descriptif. Existe-t-il un moyen d'obtenir un message d'erreur plus détaillé?

Sinon, voici ma commande:

d:\SQL Tables\data>bcp Development.dbo.wbl_zSkywardEnrollment2 in zSkywardEnroll 
ment.xml -fSE_format.fmt -m50 -eseErrorLog -b100 -t0x20 -T -F107 

Tous ces fichiers sont dans ce même répertoire. Je sais qu'il est indiqué de spécifier le chemin complet du fichier, mais comme ils sont tous dans ce même répertoire et que j'ai vu un autre exemple où ils n'ont pas spécifié de répertoire, j'ai pensé que cela suffirait.

J'ai essayé ceci sans le fichier de format aussi, le faisant interactivement mais obtenant les mêmes erreurs.

Ceci est mon fichier de format:

10.0 
32 
1  SQLINT    0  4  " " 1  SCHOOL_YEAR        "" 
2  SQLNCHAR   2  20  " " 2  ENTITY_ID         SQL_Latin1_General_CP1_CI_AS 
3  SQLINT    0  4  " " 3  TERM_NBR         "" 
4  SQLINT    1  4  " " 4  SCHD_HST_GRAD_YEAR       "" 
5  SQLNCHAR   2  60  " " 5  OTHER_ID         SQL_Latin1_General_CP1_CI_AS 
6  SQLNUMERIC   1  19  " " 6  GRAD_YR         "" 
7  SQLNCHAR   2  120  " " 7  LAST_NAME         SQL_Latin1_General_CP1_CI_AS 
8  SQLNCHAR   2  60  " " 8  FIRST_NAME         SQL_Latin1_General_CP1_CI_AS 
9  SQLNCHAR   2  60  " " 9  MIDDLE_NAME        SQL_Latin1_General_CP1_CI_AS 
10  SQLDATETIME   1  8  " " 10 BIRTHDATE         "" 
11  SQLNCHAR   2  4  " " 11 GENDER          SQL_Latin1_General_CP1_CI_AS 
12  SQLNCHAR   2  20  " " 12 RACE_CODE         SQL_Latin1_General_CP1_CI_AS 
13  SQLNCHAR   2  40  " " 13 DISTRICT_CODE        SQL_Latin1_General_CP1_CI_AS 
14  SQLBIT    1  1  " " 14 X_SPECIAL_EDUCATION      "" 
15  SQLBIT    1  1  " " 15 X_GIFTED_TALENTED       "" 
16  SQLBIT    1  1  " " 16 X_SECTION_504        "" 
17  SQLBIT    1  1  " " 17 X_MIGRANT         "" 
18  SQLBIT    1  1  " " 18 X_IEP          "" 
19  SQLBIT    1  1  " " 19 X_IEP_ACCOM        "" 
20  SQLBIT    1  1  " " 20 X_ESL          "" 
21  SQLNCHAR   2  4  " " 21 STUDENT_STATUS        SQL_Latin1_General_CP1_CI_AS 
22  SQLINT    0  4  " " 22 STUDENT_ID         "" 
23  SQLINT    1  4  " " 23 ENG_PROF         "" 
24  SQLNCHAR   2  60  " " 24 ALPHAKEY         SQL_Latin1_General_CP1_CI_AS 
25  SQLNCHAR   2  20  " " 25 SCHOOL_ID         SQL_Latin1_General_CP1_CI_AS 
26  SQLNUMERIC   1  19  " " 26 MN_EDE_NBR         "" 
27  SQLNCHAR   2  20  " " 27 LANGUAGE_CODE        SQL_Latin1_General_CP1_CI_AS 
28  SQLINT    1  4  " " 28 ADVISOR         "" 
29  SQLBIT    1  1  " " 29 MN_LIMITED_ENGLISH       "" 
30  SQLNCHAR   2  20  " " 30 TYPE_STUDENT_ID       SQL_Latin1_General_CP1_CI_AS 
31  SQLNCHAR   2  20  " " 31 CY_TEAM_SCHD_ID       SQL_Latin1_General_CP1_CI_AS 
32  SQLNCHAR   2  20  " " 32 HOMEROOM_NUMBER       SQL_Latin1_General_CP1_CI_AS 

Ceci est ma table SQL:

CREATE TABLE [dbo].[wbl_zSkywardEnrollment2](
    [SCHOOL_YEAR] [int] NOT NULL, 
    [ENTITY_ID] [nvarchar](10) NOT NULL, 
    [TERM_NBR] [int] NOT NULL, 
    [SCHD_HST_GRAD_YEAR] [int] NULL, 
    [OTHER_ID] [nvarchar](30) NULL, 
    [GRAD_YR] numeric(19,0) NULL, 
    [LAST_NAME] [nvarchar](60) NOT NULL, 
    [FIRST_NAME] [nvarchar](30) NULL, 
    [MIDDLE_NAME] [nvarchar](30) NULL, 
    [BIRTHDATE] datetime NULL, 
    [GENDER] [nvarchar](2) NULL, 
    [RACE_CODE] [nvarchar](10) NULL, 
    [DISTRICT_CODE] [nvarchar](20) NULL, 
    [X_SPECIAL_EDUCATION] bit NULL, 
    [X_GIFTED_TALENTED] bit NULL, 
    [X_SECTION_504] bit NULL, 
    [X_MIGRANT] bit NULL, 
    [X_IEP] bit NULL, 
    [X_IEP_ACCOM] bit NULL, 
    [X_ESL] bit NULL, 
    [STUDENT_STATUS] [nvarchar](2) NULL, 
    [STUDENT_ID] [int] NOT NULL, 
    [ENG_PROF] [int] NULL, 
    [ALPHAKEY] [nvarchar](30) NOT NULL, 
    [SCHOOL_ID] [nvarchar](10) NULL, 
    [MN_EDE_NBR] [numeric](19, 0) NULL, 
    [LANGUAGE_CODE] [nvarchar](10) NULL, 
    [ADVISOR] [int] NULL, 
    [MN_LIMITED_ENGLISH] bit NULL, 
    [TYPE_STUDENT_ID] [nvarchar](10) NULL, 
    [CY_TEAM_SCHD_ID] [nvarchar](10) NULL, 
    [HOMEROOM_NUMBER] [nvarchar](10) NOT NULL 
) ON [PRIMARY] 

Et je l'ai essayé en commençant par la ligne 1. Je suis curieux de quelle ligne devrait BCP commencer sur? La ligne 1 de ce fichier XML commence par les informations Schema et ElementType. Mais à la ligne 107 est où rs: section de données commence.

La première partie de ce fichier XML:

<xml xmlns:s='uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882' 

    xmlns:dt='uuid:C2F41010-65B3-11d1-A29F-00AA00C14882' 

    xmlns:rs='urn:schemas-microsoft-com:rowset' 

    xmlns:z='#RowsetSchema'> 

<s:Schema id='RowsetSchema'> 

    <s:ElementType name='row' content='eltOnly'> 

     <s:AttributeType name='c0' rs:name='SCHOOL_YEAR' rs:number='1'> 

      <s:datatype dt:type='int' dt:maxLength='4' rs:precision='10' rs:fixedlength='true' rs:maybenull='false'/> 

     </s:AttributeType> 

     <s:AttributeType name='c1' rs:name='ENTITY_ID' rs:number='2'> 

      <s:datatype dt:type='string' rs:dbtype='str' dt:maxLength='10' rs:maybenull='false'/> 

     </s:AttributeType> 

     <s:AttributeType name='c2' rs:name='TERM_NBR' rs:number='3'> 

      <s:datatype dt:type='int' dt:maxLength='4' rs:precision='10' rs:fixedlength='true' rs:maybenull='false'/> 

     </s:AttributeType> 

     <s:AttributeType name='c3' rs:name='SCHD_HST_GRAD_YEAR' rs:number='4' rs:nullable='true'> 

      <s:datatype dt:type='int' dt:maxLength='4' rs:precision='10' rs:fixedlength='true'/> 

     </s:AttributeType> 

     <s:AttributeType name='c4' rs:name='OTHER_ID' rs:number='5' rs:nullable='true'> 

      <s:datatype dt:type='string' rs:dbtype='str' dt:maxLength='24'/> 

     </s:AttributeType> 

     <s:AttributeType name='c5' rs:name='GRAD_YR' rs:number='6' rs:nullable='true'> 

      <s:datatype dt:type='number' rs:dbtype='numeric' dt:maxLength='19' rs:scale='0' rs:precision='15' rs:fixedlength='true'/> 

     </s:AttributeType> 

     <s:AttributeType name='c6' rs:name='LAST_NAME' rs:number='7'> 

      <s:datatype dt:type='string' rs:dbtype='str' dt:maxLength='60' rs:maybenull='false'/> 

     </s:AttributeType> 

     <s:AttributeType name='c7' rs:name='FIRST_NAME' rs:number='8' rs:nullable='true'> 

      <s:datatype dt:type='string' rs:dbtype='str' dt:maxLength='30'/> 

     </s:AttributeType> 

     <s:AttributeType name='c8' rs:name='MIDDLE_NAME' rs:number='9' rs:nullable='true'> 

      <s:datatype dt:type='string' rs:dbtype='str' dt:maxLength='30'/> 

     </s:AttributeType> 

     <s:AttributeType name='BIRTHDATE' rs:name='BIRTHDATE' rs:number='10' rs:nullable='true' rs:write='true'> 

      <s:datatype dt:type='date' dt:maxLength='6' rs:fixedlength='true'/> 

     </s:AttributeType> 

     <s:AttributeType name='GENDER' rs:name='GENDER' rs:number='11' rs:nullable='true' rs:write='true'> 

      <s:datatype dt:type='string' rs:dbtype='str' dt:maxLength='2'/> 

     </s:AttributeType> 

     <s:AttributeType name='c11' rs:name='RACE_CODE' rs:number='12' rs:nullable='true'> 

      <s:datatype dt:type='string' rs:dbtype='str' dt:maxLength='6'/> 

     </s:AttributeType> 

     <s:AttributeType name='c12' rs:name='DISTRICT_CODE' rs:number='13' rs:nullable='true'> 

      <s:datatype dt:type='string' rs:dbtype='str' dt:maxLength='14'/> 

     </s:AttributeType> 

     <s:AttributeType name='c13' rs:name='X_SPECIAL_EDUCATION' rs:number='14' rs:nullable='true'> 

      <s:datatype dt:type='boolean' dt:maxLength='2' rs:fixedlength='true'/> 

     </s:AttributeType> 

     <s:AttributeType name='c14' rs:name='X_GIFTED_TALENTED' rs:number='15' rs:nullable='true'> 

      <s:datatype dt:type='boolean' dt:maxLength='2' rs:fixedlength='true'/> 

     </s:AttributeType> 

     <s:AttributeType name='c15' rs:name='X_SECTION_504' rs:number='16' rs:nullable='true'> 

      <s:datatype dt:type='boolean' dt:maxLength='2' rs:fixedlength='true'/> 

     </s:AttributeType> 

     <s:AttributeType name='c16' rs:name='X_MIGRANT' rs:number='17' rs:nullable='true'> 

      <s:datatype dt:type='boolean' dt:maxLength='2' rs:fixedlength='true'/> 

     </s:AttributeType> 

     <s:AttributeType name='c17' rs:name='X_IEP' rs:number='18' rs:nullable='true'> 

      <s:datatype dt:type='boolean' dt:maxLength='2' rs:fixedlength='true'/> 

     </s:AttributeType> 

     <s:AttributeType name='c18' rs:name='X_IEP_ACCOM' rs:number='19' rs:nullable='true'> 

      <s:datatype dt:type='boolean' dt:maxLength='2' rs:fixedlength='true'/> 

     </s:AttributeType> 

     <s:AttributeType name='c19' rs:name='X_ESL' rs:number='20' rs:nullable='true'> 

      <s:datatype dt:type='boolean' dt:maxLength='2' rs:fixedlength='true'/> 

     </s:AttributeType> 

     <s:AttributeType name='c20' rs:name='STUDENT_STATUS' rs:number='21' rs:nullable='true'> 

      <s:datatype dt:type='string' rs:dbtype='str' dt:maxLength='2'/> 

     </s:AttributeType> 

     <s:AttributeType name='c21' rs:name='STUDENT_ID' rs:number='22'> 

      <s:datatype dt:type='int' dt:maxLength='4' rs:precision='10' rs:fixedlength='true' rs:maybenull='false'/> 

     </s:AttributeType> 

     <s:AttributeType name='c22' rs:name='ENGL_PROF' rs:number='23' rs:nullable='true'> 

      <s:datatype dt:type='int' dt:maxLength='4' rs:precision='10' rs:fixedlength='true'/> 

     </s:AttributeType> 

     <s:AttributeType name='ALPHAKEY' rs:name='ALPHAKEY' rs:number='24' rs:write='true'> 

      <s:datatype dt:type='string' rs:dbtype='str' dt:maxLength='22' rs:maybenull='false'/> 

     </s:AttributeType> 

     <s:AttributeType name='c24' rs:name='SCHOOL_ID' rs:number='25'> 

      <s:datatype dt:type='string' rs:dbtype='str' dt:maxLength='10' rs:maybenull='false'/> 

     </s:AttributeType> 

     <s:AttributeType name='c25' rs:name='MN_EDE_NBR' rs:number='26' rs:nullable='true'> 

      <s:datatype dt:type='number' rs:dbtype='numeric' dt:maxLength='19' rs:scale='0' rs:precision='15' rs:fixedlength='true'/> 

     </s:AttributeType> 

     <s:AttributeType name='c26' rs:name='LANGUAGE_CODE' rs:number='27' rs:nullable='true'> 

      <s:datatype dt:type='string' rs:dbtype='str' dt:maxLength='6'/> 

     </s:AttributeType> 

     <s:AttributeType name='c27' rs:name='ADVISOR' rs:number='28' rs:nullable='true' rs:write='true'> 

      <s:datatype dt:type='int' dt:maxLength='4' rs:precision='10' rs:fixedlength='true'/> 

     </s:AttributeType> 

     <s:AttributeType name='c28' rs:name='MN_LIMITED_ENGLISH' rs:number='29' rs:nullable='true'> 

      <s:datatype dt:type='boolean' dt:maxLength='2' rs:fixedlength='true'/> 

     </s:AttributeType> 

     <s:AttributeType name='c29' rs:name='TYPE_STUDENT_ID' rs:number='30' rs:nullable='true'> 

      <s:datatype dt:type='string' rs:dbtype='str' dt:maxLength='6'/> 

     </s:AttributeType> 

     <s:AttributeType name='c30' rs:name='CY_TEAM_SCHD_ID' rs:number='31' rs:nullable='true'> 

      <s:datatype dt:type='string' rs:dbtype='str' dt:maxLength='6'/> 

     </s:AttributeType> 

     <s:AttributeType name='c31' rs:name='HOMEROOM_NUMBER' rs:number='32'> 

      <s:datatype dt:type='string' rs:dbtype='str' dt:maxLength='10' rs:maybenull='false'/> 

     </s:AttributeType> 

     <s:extends type='rs:rowbase'/> 

    </s:ElementType> 

</s:Schema> 

<rs:data> 

    <z:row c0='2004' c1='057' c2='0' c3='2010' c4='671590' c5='2010' c6='AANENSON' c7='SHELLI' c8='A' BIRTHDATE='1992-07-01' 

     GENDER='F' c11='5' c12='' c13='False' c14='True' c15='False' c16='False' c17='False' c18='False' c19='False' 

     c20='I' c21='12' c22='7' ALPHAKEY='AANENSHE000' c24='057' c25='624000671590' c26='011' ADVISOR='0' c28='False' 

     c29='R' c30='' c31=''/> 

    <z:row c0='2004' c1='057' c2='0' c3='2010' c4='671590' c5='2010' c6='AANENSON' c7='SHELLI' c8='A' BIRTHDATE='1992-07-01' 

     GENDER='F' c11='5' c12='' c13='False' c14='True' c15='False' c16='False' c17='False' c18='False' c19='False' 

     c20='I' c21='12' c22='7' ALPHAKEY='AANENSHE000' c24='057' c25='624000671590' c26='011' ADVISOR='0' c28='False' 

     c29='R' c30='' c31=''/> 

    <z:row c0='2004' c1='057' c2='0' c3='2010' c4='671590' c5='2010' c6='AANENSON' c7='SHELLI' c8='A' BIRTHDATE='1992-07-01' 

     GENDER='F' c11='5' c12='' c13='False' c14='True' c15='False' c16='False' c17='False' c18='False' c19='False' 

     c20='I' c21='12' c22='7' ALPHAKEY='AANENSHE000' c24='057' c25='624000671590' c26='011' ADVISOR='0' c28='False' 

     c29='R' c30='' c31=''/> 

    <z:row c0='2004' c1='057' c2='0' c3='2010' c4='671590' c5='2010' c6='AANENSON' c7='SHELLI' c8='A' BIRTHDATE='1992-07-01' 

     GENDER='F' c11='5' c12='' c13='False' c14='True' c15='False' c16='False' c17='False' c18='False' c19='False' 

     c20='I' c21='12' c22='7' ALPHAKEY='AANENSHE000' c24='057' c25='624000671590' c26='011' ADVISOR='0' c28='False' 

     c29='R' c30='' c31=''/> 

    <z:row c0='2004' c1='057' c2='0' c3='2010' c4='671590' c5='2010' c6='AANENSON' c7='SHELLI' c8='A' BIRTHDATE='1992-07-01' 

     GENDER='F' c11='5' c12='' c13='False' c14='True' c15='False' c16='False' c17='False' c18='False' c19='False' 

     c20='I' c21='12' c22='7' ALPHAKEY='AANENSHE000' c24='057' c25='624000671590' c26='011' ADVISOR='0' c28='False' 

     c29='R' c30='' c31=''/> 

    <z:row c0='2004' c1='057' c2='0' c3='2010' c4='671590' c5='2010' c6='AANENSON' c7='SHELLI' c8='A' BIRTHDATE='1992-07-01' 

     GENDER='F' c11='5' c12='' c13='False' c14='True' c15='False' c16='False' c17='False' c18='False' c19='False' 

     c20='I' c21='12' c22='7' ALPHAKEY='AANENSHE000' c24='057' c25='624000671590' c26='011' ADVISOR='0' c28='False' 

     c29='R' c30='' c31=''/> 
+0

J'essaierais honnêtement d'utiliser SSIS pour lire des données XML. Le BCP est une sorte de «boîte noire» - vous mettez des données, vous obtenez des données, et vous avez peu de contrôle (ou de rétroaction) sur le pourquoi et le comment. –

+0

Merci Phillip, mais voir mon commentaire ci-dessous? Ce fichier est trop grand pour cela. – salvationishere

Répondre

1

Vous ne pouvez pas utiliser bcp pour cela. Le meilleur que bcp peut vous donner est une importation à partir d'un fichier avec une virgule/tabulation/etc. valeurs séparées. Toutes les références que vous voyez dans xml dans la documentation bcp se réfèrent au fichier de format, pas aux données réelles à importer.

Il y a deux façons de le faire. Le plus simple consiste à utiliser SQL Server Integration Services pour cela. This peut vous aider plus loin.

Vous pouvez également le faire par reading the xml file dans le serveur SQL. Ensuite, utilisez sp_xml_preparedocument pour analyser le fichier. Enfin, utilisez OPENXMLin combination withINSERT pour importer les données.

+0

Etes-vous sûr que je ne peux pas utiliser BCP pour cela? Oui, je veux finalement utiliser SSIS pour cela, mais parce que ce XML est si grand qu'il provoque une erreur de mémoire insuffisante et donc je veux d'abord utiliser BCP pour l'importer dans une table temporaire. Comment puis-je lire dans ce fichier XML? Suggérez-vous Bulk Insert? Je ne suis pas familier avec sp_xml_preparedocument - est-ce que cela importerait aussi ce fichier? – salvationishere