Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Uszkodzony plik eksportu SQL Server BCP?

Dzięki Bogu, dzięki odpowiedzi @user_0 i tajemniczej odpowiedzi i komentarzowi @user3494351 oraz temu starożytnemu postowi na forum, w końcu zrozumiałem to po kilku godzinach uderzania głową w ścianę.

Problem polega na tym, że BCP lubi domyślnie dodawać dodatkowe 8 bajtów do pliku. Powoduje to uszkodzenie pliku i uniemożliwia jego otwarcie, jeśli użyjesz tylko natywnej flagi -n.

Jednak BCP pozwala określić plik formatu jako wynik, który może pozwolić mu powiedzieć, aby nie dodawał dodatkowych 8 bajtów. Mam więc tabelę, którą utworzyłem (do użycia w kursorze) w SQL Server, która ma tylko JEDEN WIERSZ i JEDNĄ KOLUMNĘ z moimi danymi binarnymi. Tabela musi istnieć po uruchomieniu pierwszego polecenia.

Najpierw w wierszu poleceń musisz to zrobić:

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

Spowoduje to utworzenie pliku formatfile.fmt w katalogu, w którym się znajdujesz. Zrobiłem na dysku E:\. Oto jak to wygląda:

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

To 8 jest zmienną, która bcp mówi, ile bajtów należy dodać do pliku. To drań psuje twoje pliki. Zmień tego frajera na 0:

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

Teraz po prostu uruchom skrypt BCP, usuń flagę -n i dołącz flagę -f:

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sprawdź miejsce używane przez tabelę w SQL Server

  2. Połącz PHP z MSSQL przez PDO ODBC

  3. Typy danych tekstowych, ntext i obrazu> nie mogą być porównywane ani sortowane, z wyjątkiem przypadku użycia operatora IS NULL lub LIKE>

  4. OBJECTPROPERTY() vs OBJECTPROPERTYEX() w SQL Server:jaka jest różnica?

  5. Nieoczekiwane zachowanie @@rowcount wewnątrz UDF w MS SQL 2019