Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Arquivo corrompido de exportação do SQL Server BCP?


Graças a Deus, graças à resposta do @user_0 e à resposta e comentário enigmáticos do @user3494351 e a este antigo post no fórum, finalmente descobri isso depois de várias horas batendo minha cabeça contra a parede.

O problema é que o BCP gosta de adicionar 8 bytes extras ao arquivo por padrão. Isso corrompe o arquivo e o torna incapaz de ser aberto se você usar apenas o sinalizador -n nativo.

No entanto, o BCP permite que você especifique um arquivo de formato como saída que pode permitir que você diga a ele para não adicionar os 8 bytes extras. Então eu tenho uma tabela que criei (para ser usada em um cursor) no SQL Server que tem apenas UMA LINHA e UMA COLUNA com meus dados binários. A tabela deve existir quando você executa o primeiro comando.

Na linha de comando primeiro você precisa fazer isso:
bcp MyDatabase.MySchema.MyTempTable format nul -T -n -f formatfile.fmt

Isso cria formatfile.fmt no diretório em que você está. Eu fiz na unidade E:\. Aqui está o que parece:
10.0
1
1       SQLBINARY           8       0       ""   1     MyColumn             ""

Esse 8 ali é a variável que bcp diz quantos bytes adicionar ao seu arquivo. É o bastardo que está corrompendo seus arquivos. Mude esse otário para um 0:
10.0
1
1       SQLBINARY           0       0       ""   1     MyColumn             ""

Agora apenas execute seu script BCP, solte o sinalizador -n e inclua o sinalizador -f:
bcp "SELECT MyColumn FROM MyDatabase.MySchema.MyTempTable" queryout "E:\MyOutputpath" -T -f E:\formatfile.fmt