Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Fichier corrompu d'exportation SQL Server BCP ?

Dieu merci, grâce à la réponse @ user_0 et à la réponse et au commentaire cryptés de @ user3494351 et à cet ancien message sur le forum, j'ai finalement compris cela après plusieurs heures à me cogner la tête contre le mur.

Le problème est que BCP aime ajouter 8 octets supplémentaires au fichier par défaut. Cela corrompt le fichier et le rend impossible à ouvrir si vous utilisez simplement l'indicateur natif -n.

Cependant, BCP vous permet de spécifier un fichier de format en sortie qui peut vous permettre de lui dire de ne pas ajouter les 8 octets supplémentaires. J'ai donc une table que j'ai créée (à utiliser dans un curseur) dans SQL Server qui n'a qu'UNE LIGNE et UNE COLONNE avec mes données binaires. La table doit exister lorsque vous exécutez la première commande.

En ligne de commande, vous devez d'abord faire ceci :

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

Cela crée formatfile.fmt dans le répertoire dans lequel vous vous trouvez. Je l'ai fait sur le lecteur E:\. Voici à quoi cela ressemble :

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

Ce 8 juste là est la variable qui indique bcp combien d'octets ajouter à votre fichier. C'est le bâtard qui corrompt vos fichiers. Remplacez cette ventouse par un 0 :

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

Maintenant, exécutez simplement votre script BCP, supprimez l'indicateur -n et incluez l'indicateur -f :

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