Potrzebuję wyeksportować dane do pliku z ogromnej tabeli zawierającej tylko jedną kolumnę, ale tysiące wierszy, w których ważna jest kolejność wierszy. Używam polecenia bcp, jak poniżej:
bcp DBNAME.dbo.tblName out mydata.dat -Uusername -Ppassword -c
Sprawdziłem z tabelą mającą 10 wierszy i widzę, że kolejność wierszy jest zachowywana w pliku danych. Ale czy mogę założyć, że bcp utrzyma zamówienie, jeśli liczba wierszy wynosi więcej niż 10000?Czy polecenie bcp utrzymuje kolejność wierszy podczas eksportowania do pliku danych?
5
A
Odpowiedz
6
myślę, że to będzie w przypadku korzystania z instrukcji SQL (z ORDER BY
) w poleceniu bcp:
http://www.sqlteam.com/article/exporting-data-programatically-with-bcp-and-xp_cmdshell
gdzie mają następujący przykład:
SET @bcpCommand = 'bcp "SELECT * FROM pubs..authors
ORDER BY au_lname" queryout "'
1
Nigdy nie należy zakładać, że SQL SELECT (lub bcp) zwróci wartości w określonej kolejności lub w tej samej kolejności, chyba że użyjesz klauzuli ORDER BY.
Ogólnie wartości są zwracane w kolejności na podstawie indeksu w tabeli.
Jednak widziałem przypadki, w których wartości nie są zwracane w kolejności indeksowej. Wygląda na to, że wiersze w pamięci podręcznej mogą zostać zwrócone przed wierszami z dysku, nawet jeśli wiersze na dysku są pierwszymi w indeksie.