![]() |
Datenbank: MS SQL • Version: 2012 • Zugriff über: bcp
bcp als batchdatei
Hallo ich habe ein Problem mit der Ausführung eines Batchbefehles für bcp.
Der Datenbankname wird durch das eigentliche Programm teils automatisch angelegt: DB_Name:durchMitarbeitervergebenerName+{F010E787-D376-43DC-A021-F1441EDB85A2} Führe ich den Befehl direkt in der Shell aus, funtioniert er wunderbar:
Code:
Führe ich ihn als Batch aus, startet er den Kopiervorgang, kopiert aber 0 Zeilen und beendet die Ausführung ohne Fehlermeldung.
bcp "SELECT FieldInfo.Account, LEN(FieldInfo.Account) AS LaengeAccount,Data.fact,Data.idLevel, Data.idTime, FieldInfo.FieldName FROM dbo.tbl_DataCube AS Data INNER JOIN dbo.tbl_FieldMember AS Fields ON Data.idField = Fields.idField INNER JOIN dbo.tbl_FieldMemberInfo AS FieldInfo ON Fields.idField = FieldInfo.idField WHERE (FieldInfo.Account LIKE N'001001%') AND (Data.idLevel = '3') AND (Data.idTime > '183')" queryout "\\Netzlaufwerk\Daten_Dummy.exp" -T -c -d durchMitarbeitervergebenerName+{F010E787-D376-43DC-A021-F1441EDB85A2}
Die bestehende Datei auf dem Netzlaufwerk wird dabei auch durch eine leere ersetzt. Ich habe versucht den DBNamen nochmal zu escapen (',''), aber dann beschwert er sich gleich, das die Datenbank nicht gefunden werden kann. Vielleicht hat ja jemand von euch eine Idee. |
AW: bcp als batchdatei
Kein Fehler oder nur keinen Fehler gesehn?
Notfalls einfach mal alle Wege und Werte überprüfen/speichern.
Code:
bcp "SELECT.... -e D:\Error.log -o D:\Output.log > D:\OutputMsg.log 2> D:\OutputErr.log
if errorlevel 1 echo %errorlevel% > D:\ErrorLevel.log Zitat:
Für einen halbwegs ordentlichen Kommandozeilenparser sollte xxx und "xxx" das Gleiche sein. Bei xxx und x"xx" sieht es manchmal aber anders aus. |
AW: bcp als batchdatei
Vielen Dank schonmal für eine Antwort.
Den Escape Versuch habe ich mit einfachen 'DB_Name' und doppelten Hochkommata''DB_Name'' gemacht. Anführungszeichen "DB_Name" werden auch korrekt erkannt, aber kein Unterschied im Verhalten (direkt in der Shell geht, über Batch nicht). Das Output.log sagt: "Kopiervorgang wird gestartet... 0 Zeilen kopiert. Netzwerkpaketgr”áe (Bytes): 4096 Zeit (ms.) gesamt: 1" Das error.log, OutputErr.log und OutputMsg.log bleiben leer und ein ErrorLevel.log wird nicht erstellt. |
AW: bcp als batchdatei
Eventuell liegt es am SQL? Deine Zahlen sind als String im WHERE? Da kein Fehler kommt, trifft das WHERE wohl einfach nur nichts.
Auch schon ein einfaches
Delphi-Quellcode:
versucht?
SELECT * FROM irgendwas
Im Postgres hatte ich mal das Problem dass das Escapting der Strings in der Console etwas anders gemacht werden musste. Und grade erst wurden da die Auto-Casts verändert, womit da die Statements auch nicht mehr "wie gewohnt" funktionierten. Auto-Cast z.b. beim Vergleich von String und Integer oder Strings mit unterschiedlichen Codierungen oder ... |
AW: bcp als batchdatei
Hallo,
also hier wird -S für den Server verwendet ![]() |
AW: bcp als batchdatei
Zitat:
Es hat mich auf die richtige Lösung gebracht:
Code:
Prozentzeichen müssen gedoppelt werden.
(FieldInfo.Account LIKE N'001001%%')
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:59 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz