sql >> Database >  >> RDS >> Sqlserver

SQL Server BCP export beschadigd bestand?

Godzijdank, dankzij het antwoord van @user_0 en het cryptische antwoord en commentaar van @user3494351 en deze oude forumpost kwam ik er eindelijk achter na een paar uur met mijn hoofd tegen de muur te hebben geslagen.

Het probleem is dat BCP standaard graag 8 bytes extra aan het bestand toevoegt. Dit corrumpeert het bestand en maakt het niet mogelijk om het te openen als je alleen de native -n vlag gebruikt.

Met BCP kunt u echter een formaatbestand als uitvoer specificeren waarmee u kunt aangeven dat de extra 8 bytes niet moeten worden toegevoegd. Dus ik heb een tabel die ik heb gemaakt (om te gebruiken in een cursor) in SQL Server die slechts ÉÉN RIJ en ÉÉN KOLOM heeft met mijn binaire gegevens. Tabel moet bestaan ​​wanneer u de eerste opdracht uitvoert.

In de opdrachtregel moet u eerst dit doen:

bcp MyDatabase.MySchema.MyTempTable format nul -T -n -f formatfile.fmt

Dit creëert formatfile.fmt in de map waarin u zich bevindt. Ik deed het op E:\ drive. Zo ziet het eruit:

10.0
1
1       SQLBINARY           8       0       ""   1     MyColumn             ""

Die 8 daar is de variabele die bcp zegt hoeveel bytes je aan je bestand moet toevoegen. Het is de klootzak die uw bestanden corrumpeert. Verander die sukkel in een 0:

10.0
1
1       SQLBINARY           0       0       ""   1     MyColumn             ""

Voer nu gewoon uw BCP-script uit, laat de vlag -n vallen en voeg de vlag -f toe:

bcp "SELECT MyColumn FROM MyDatabase.MySchema.MyTempTable" queryout "E:\MyOutputpath" -T -f E:\formatfile.fmt


  1. SQLite JSON_ARRAY()

  2. Sorteert 'Selecteren' altijd op primaire sleutel?

  3. Indexen in MySQL begrijpen:deel twee

  4. Hoe kun je dezelfde query meerdere keren uitvoeren met lus in PL/SQL?