J'ai besoin d'exporter des données vers un fichier à partir d'une énorme table avec une seule colonne mais des milliers de lignes où l'ordre de la ligne est important. J'utilise la commande bcp comme ci-dessous
bcp DBNAME.dbo.tblName out mydata.dat -Uusername -Ppassword -c
J'ai vérifié avec la table ayant 10 lignes et je vois que l'ordre des lignes est maintenu dans le fichier de données. Mais puis-je supposer que bcp maintiendrait l'ordre si le nombre de lignes est supérieur à 10000?Est-ce que bcp out maintient l'ordre des lignes lors de l'exportation dans un fichier de données?
5
A
Répondre
6
Je pense que ce sera si vous utilisez une instruction SQL (avec ORDER BY
) dans votre commande bcp:
http://www.sqlteam.com/article/exporting-data-programatically-with-bcp-and-xp_cmdshell
où ils ont l'exemple suivant:
SET @bcpCommand = 'bcp "SELECT * FROM pubs..authors
ORDER BY au_lname" queryout "'
1
Vous ne devriez jamais prendre qu'un SQL SELECT (ou bcp) renverra des valeurs dans un certain ordre ou dans le même ordre, sauf si vous utilisez une clause ORDER BY.
Généralement, les valeurs sont renvoyées dans l'ordre en fonction d'un index sur la table.
Cependant, j'ai vu des cas où les valeurs ne sont pas retournées dans l'ordre de l'index. Il semble que les lignes du cache peuvent être retournées avant les lignes du disque même si les lignes sur le disque sont les premières dans l'index.