2009-07-08 8 views
0

Wir haben eine Datenbanktabelle, die wir im Rahmen unserer Bereitstellungsprozedur mit Daten füllen. Da eine der Spalten binär ist (es ist ein binäres serialisiertes Objekt), verwenden wir BCP, um die Daten in die Tabelle zu kopieren.Die Tabelle von SQL Server mit dem BCP-Dienstprogramm kann nicht aktualisiert werden

Bisher hat dies sehr gut funktioniert, aber heute haben wir diese Technik zum ersten Mal auf einer Windows Server 2008 Maschine ausprobiert und festgestellt, dass nicht alle Spalten aktualisiert wurden. Von den 31 rows, die normalerweise als Teil dieser Operation eingefügt werden, hatte nur 2 rows tatsächlich ihre binary columns korrekt ausgefüllt. Die anderen 29 Zeilen hatten einfach Nullwerte für ihre binary column. Dies ist die erste Situation, in der ein Problem wie dieses aufgetreten ist. Dies ist die gleiche .dat-Datei, die wir für alle Bereitstellungen verwenden.

Hat jemals jemand anderes dieses Problem schon einmal kennengelernt oder einen Einblick bekommen, was das Problem sein könnte?

Vielen Dank im Voraus, Jeremy

+0

SQL Server nehme ich an ... 2005 oder 2008? – gbn

+0

Ja, sorry SQL Server 2005. Wir haben dies bisher auf Developer und Enterprise Edition ohne Problem ausgeführt. Der Computer, auf dem das Problem auftritt, führt die Standard Edition aus. Ich bin mir nicht sicher, ob das zu dem Problem beiträgt oder nicht. –

Antwort

0

Meine Vermutung ist, dass Sie -c oder -w verwenden als Text zu entleeren, und es ist auf eine bestimmte Kombination von Zeichen erstickt es nicht und in einer die Haftung verbessernden mag NULL. Dies kann auch im einheitlichen Modus passieren, wenn keine Formatdatei vorhanden ist. Versuchen Sie Folgendes und sehen Sie, ob es hilft. (Natürlich müssen Sie den Server hinzufügen und Login-Schalter selbst.)

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" 

Das wird die Tabellendaten als gerade binär mit einem Format-Datei-Dump, NULL-Werte und Identitätswerte absolut sicherstellen alles steht an. Darüber hinaus verwendet es Chargen von 1000, um den Datenspeicherauszug zu optimieren. Dann es einzufügen zurück:

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

..., die die Formatdatei, Datendatei verwenden, und legen Sie batching die Geschwindigkeit ein wenig zu erhöhen. Wenn Sie mehr Geschwindigkeit benötigen, sollten Sie sich BULK INSERT, FirstRow/LastRow und das parallele Laden ansehen, aber das ist ein bisschen über den Rahmen dieser Frage hinaus. :)