2016-07-26 10 views
0

Ich versuche, eine SQL-Abfrage durch Batch-Datei auszuführen zu bekommen und wenn ich ich bin, dies zu tun versuchenZur Eingabe von Datum vom Benutzer in Batch-Datei

ungültiges Argument Fehler

Im Folgenden bekomme Datei ist der Ansatz, mit dem ich versuche, meine SQL-Skript

:start 

cls 

@echo ------BILLING REPORT--------- 

@echo Please enter billing report Date in (YYYY/MM/DD) 

@echo off 

::set /P D = Enter Date: 

::Date %Date% > Billing_Data.sql 

PAUSE 

sqlcmd -S database\instance_name -E -i "C:\Users\rb54761\Deskto\rb54761\Billing_Data_For_Certs_New.sql" > Output.txt -v Date = '2016-07-01' 

:: -o "C:\Users\rb54761\Desktop\rb54761\Output.txt" 

PAUSE 

COPY C:\Users\rb54761\Desktop\rb54761\Output.txt C:\Users\rb54761\Desktop 
PAUSE 

goto start 

für das i Sache 1. ausführen müssen, wenn eine Benutzereingabe das Datum, die Daten überein holen wird ing zu diesem Zeitpunkt 2. i in diesem Datum hinzugefügt werden soll, wo Klausel, so dass Datenabruf wird Im Folgenden entsprechend ist die where-Klausel, wo ich die Daten

WHERE 
DateCompleted > CONVERT(DATETIME, '$(Date)', 102)) 
+0

Es ist nicht SQL it Batch! Und '> Output.txt -v Datum = '2016-07-01'' in einer Batch-Datei schneidet es nicht! Auf die Umleitung dürfen keine Argumente folgen. Versuchen Sie, echo on zu setzen, um den Fehler zu finden. Aber zumindest habe ich darauf hingewiesen. –

+0

Nachricht 102, Ebene 15, Status 1, Server-Datenbank \ Instanzname, Zeile 28 Falsche Syntax in der Nähe von '2016'. Ich denke, der Fehler ist beim Konvertieren von Datum in SQL-Datei akzeptiert es nicht das vollständige Datum stattdessen verwendet es nur 2016. –

+2

@ Jean-FrançoisFabre - Nicht wahr. Dateiumleitung kann überall innerhalb eines Befehls erscheinen - am Anfang, am Ende oder in der Mitte! Die nachfolgenden Argumente im OP-Befehl sind Argumente für sqlcmd, nicht für die Umleitung. – dbenham

Antwort

0

eingeben möchten In Sie Befehlszeile Sie -v Date = '2016-07-01' verwenden, und die einfachen Anführungszeichen werden als Teil der Variablen sqlcmd betrachtet. In Ihrem Skript verwenden Sie '$(Date)', die ''2016-07-01'' wird, und der Fehler sollte ziemlich offensichtlich sein.

Entfernen Sie einen Satz von Anführungszeichen entweder aus der Befehlszeile oder dem Skript, und alles sollte funktionieren.

Wenn Sie den Wert in der Befehlszeile zum Schutz gegen Gift Zeichen zitieren wollen oder Batch-Token-Trennzeichen wie Leerzeichen oder Komma enthalten, dann müssen Sie doppelte Anführungszeichen verwenden: so etwas wie
-v var = "Some value with spaces". In diesem Fall sind die doppelten Anführungszeichen nicht im Wert enthalten.

+0

ich überprüft, dass und der Fehler behoben ist, aber jetzt ist das Problem, wie ich in meinem vorherigen Kommentar erwähne, dass ich nicht spezifische Ausgabe statt bekommen kann, dass ich ganze Tabelle in meiner Ausgabe bekomme Datei, wenn ich versuche SET \ p zu verwenden D = Datum eingeben und in sqlcmd -v Datum = "% D%" –

+0

'set \ p'? Ich nehme an, du meinst 'set/P' –