2009-07-08 8 views
0

Nous avons une table de base de données que nous pré-remplissons avec des données dans le cadre de notre procédure de déploiement. Puisque l'une des colonnes est binaire (c'est un objet sérialisé binaire), nous utilisons BCP pour copier les données dans la table. Jusqu'à présent, cela a très bien fonctionné, mais nous avons essayé cette technique pour la première fois sur une machine Windows Server 2008 et nous avons constaté que toutes les colonnes n'étaient pas mises à jour. Sur les 31 rows qui sont normalement insérés dans le cadre de cette opération, seul 2 rows avait effectivement son binary columns correctement renseigné. Les 29 autres lignes avaient simplement des valeurs nulles pour leur binary column. C'est la première situation où nous avons vu un problème comme celui-ci et c'est le même fichier .dat que nous utilisons pour tous nos déploiements.Impossible de mettre à jour la table de SQL Server avec l'utilitaire BCP

Est-ce que quelqu'un d'autre a déjà rencontré ce problème avant ou avez-vous un aperçu de ce que le problème pourrait être?

Merci à l'avance, Jeremy

+0

SQL Server Je suppose ... 2005 ou 2008? – gbn

+0

Oui, désolé SQL Server 2005. Nous l'avons déjà exécuté sur Developer Edition et Enterprise Edition jusqu'à présent sans problème. La machine sur laquelle nous voyons un problème fonctionne en fait Standard Edition. Je ne suis pas sûr si cela contribue à la question ou non. –

Répondre

0

Je suppose que vous utilisez -c -W pour vider sous forme de texte, et il est étouffé par une combinaison particulière de caractères, il n'aime pas et substratum dans un NUL. Cela peut également se produire en mode natif s'il n'y a pas de fichier de format. Essayez ce qui suit et voyez si cela aide. (De toute évidence, vous devrez ajouter le serveur et connectez-vous vous-même les commutateurs.)

bcp MyDatabase.dbo.MyTable format nul -f MyTable.fmt -n 
bcp MyDatabase.dbo.MyTable out MyTable.dat -f MyTable.fmt -k -E -b 1000 -h "TABLOCK" 

Ça va vider les données de la table comme binaire droite avec un fichier de format, les valeurs NULL et les valeurs d'identité pour faire absolument sûr tout est aligné. En outre, il utilisera des lots de 1000 pour optimiser la sauvegarde des données. Ensuite, pour l'insérer de nouveau:

bcp MySecondData.dbo.MyTable in MyTable.dat -f MyTable.fmt -n -b 1000 

... qui utilisera le format de fichier, le fichier de données et définir batching pour augmenter la vitesse un peu. Si vous avez besoin de plus de vitesse que cela, vous voudrez regarder BULK INSERT, FirstRow/LastRow, et charger en parallèle, mais c'est un peu au-delà de la portée de cette question. :)

Questions connexes