it-swarm.com.de

"BCP-Host-Datendatei kann nicht geöffnet werden" mit xp_cmdshell von SSMS, aber die Befehlszeile funktioniert

Ich habe eine gespeicherte Prozedur, die ab und zu für einen Job ausgeführt wird, um einige Dateien, die von einer von mir geschriebenen Anwendung hinterlassen wurden, zu BCP zu machen.

Ich habe festgestellt, dass sich die Dateien häufen und BCP sie nicht aufnimmt. Deshalb habe ich in Management Studio Folgendes getestet:

DECLARE @sql VARCHAR(MAX)
DECLARE @path VARCHAR(512) = 'C:\BCPFiles\'

--Use BCP to copy files in character format from the target directly into the table. 
SET @sql = 'bcp [MyDB].[dbo].[MyTable] in ' + @path + 'bcpFile.dat -c -T'

EXEC master..xp_cmdshell @sql

Und habe diese Fehlermeldung bekommen

(BCP Error

Die Ausführung über die Befehlszeile auf demselben Server mit demselben Befehl funktioniert problemlos.

Hier sind einige andere Beobachtungen:

  1. Ich kann rennen EXEC master..xp_cmdshell 'dir C:\*.*' und die Ergebnisse kehren wie erwartet zurück.
  2. Wenn ich die Datei kopiere und in etwas anderes umbenenne, nimmt BCP sie auf
  3. Die Datei wird von meiner Anwendung nicht geöffnet: Ich kann sie verschieben, umbenennen, bearbeiten und speichern, löschen usw. ... ohne Beschwerden von Windows.
  4. Das interne Format der Datei ist offensichtlich in Ordnung (siehe 2.)
  5. NT SERVICE\MSSQLSERVER verfügt über Vollzugriffsberechtigungen für das Verzeichnis.
  6. Die Maple Leafs haben gestern Dion Phaneuf gehandelt

Jede Hilfe wird geschätzt.

6
Brandon

Ich habe gerade Ihren Code bekommen, um an meinem Ende zu arbeiten.

Versuche dies:

Option A

  1. Weisen Sie dem Benutzer, den Sie in SQL Server Management Studio zum Ausführen der Abfrage verwenden, NTFS-Vollzugriffsberechtigungen für 'C:\BCPFiles\bcpFile.dat zu
  2. Führen Sie Ihre Abfrage in SQL Server Management Studio erneut aus

Option B

Oder versuchen Sie Folgendes, um den folgenden Fehler zu überwinden:

Error = [Microsoft][ODBC Driver 11 for SQL Server]Unable to open BCP Host data-file
  1. Löschen/verschieben Sie Ihre Datei bcpfile.dat
  2. in der Befehlszeile eingeben (um eine Dummy-Datei zu erstellen - ja, es werden Importfehler auftreten, aber nur um das Öffnen der Datei zu überwinden ...)

    echo.> c:\bcpfiles\bcpfile.dat

  3. Führen Sie Ihre Abfrage in SQL Server Management Studio erneut aus

Wenn Option A funktioniert, liegt ein Berechtigungsproblem vor. Wenn Option B funktioniert (um den ursprünglichen Fehler zu überwinden), haben Sie eine geöffnete Datei - auch wenn sie nicht geöffnet zu sein scheint. Es gibt Dienstprogramme, die beim Auffinden dieser geöffneten Dateien helfen, aber eine kostengünstige und einfache Möglichkeit zum Testen besteht darin, den Server neu zu starten - hoffentlich handelt es sich um eine Entwickler-/Testbox.

8
Sting

Dies geschieht, weil der Dateiname fehlt.

Das ist schlecht:

exec master..xp_cmdshell 'bcp "select * from [TestDB].[dbo].[tbl]" queryout "C:\Test\"'

Sie können nicht in einen Ordner schreiben. Sie müssen in eine Datei schreiben.

Das ist in Ordnung:

exec master..xp_cmdshell 'bcp "select * from [TestDB].[dbo].[tbl]" queryout "C:\Test\others.txt"'

weil Sie einen Dateinamen angegeben haben.

0
user133153

Fehler = [Microsoft] [ODBC-Treiber 11 für SQL Server] BCP-Host-Datendatei kann nicht geöffnet werden.

  • im Zusammenhang mit diesem Fehler kann das Ausgabeverzeichnis aufgrund des BCP nicht geöffnet werden. mögen: exec master..xp_cmdshell 'bcp "select * from [TestDB].[dbo].[tbl]" queryout "C:\Test\"'
  • ändern Sie das Ausgabeverzeichnis von D:..\ bis C:..\, es wird in Ordnung sein, wie ich es früher getroffen habe.
0
Phearin Sok