2016-07-26 45 views
0

我試圖通過批處理文件來運行SQL查詢,當我試圖這樣做,我得到從用戶那裏得到輸入日期在批處理文件

無效的參數錯誤

以下是與我嘗試運行我的SQL腳本

: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 

爲了這個,我需要的東西 1.當用戶輸入的日期,數據將獲取一致的批處理文件荷蘭國際集團在該日期 2.我想補充在where子句,這樣的數據將相應地獲取 該日期下面是where子句,我想進入數據

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

這不是SQL批處理!並且''Output.txt -v Date ='2016-07-01''在批處理文件中不會削減它!重定向不能跟隨參數。嘗試設置'echo on'來找出錯誤所在。但至少在我指出的地方。 –

+0

Msg 102,Level 15,State 1,Server database \ instance_name,Line 28 '2016'附近的語法錯誤。 我認爲錯誤是在SQL文件中轉換日期時它不接受完整日期,而只是使用2016. –

+2

@ Jean-FrançoisFabre - 不正確。文件重定向可以出現在命令的任何位置 - 前面,末尾或中間! OP命令中的後續參數是sqlcmd的參數,而不是重定向。 – dbenham

回答

0

在你指揮你使用-v Date = '2016-07-01'線,並且單引號被認爲是sqlcmd變量的一部分。在你的腳本中,你使用'$(Date)',它變成''2016-07-01'',錯誤應該是相當明顯的。

從命令行或腳本中刪除一組引號,並且都應該可以工作。

如果你想在命令行中,以防止毒字符或包括一批令牌分隔符像空格或逗號來引用值,則必須使用雙引號:像
-v var = "Some value with spaces"。在這種情況下,雙引號是而不是包含在該值中。

+0

我檢查,並且錯誤已解決,但現在的問題是,因爲我在我以前的評論中提到,我不能得到具體的輸出,而不是我得到整個表在我的輸出文件,如果我想使用SET \ p D =輸入日期和sqlcmd -v日期=「%D%」 –

+0

'set \ p'?我想你的意思是'set/P' –