2016-07-26 3 views
0

배치 파일에서 사용자의 입력 날짜를 얻으려면 내가 그렇게하려고 할 때 나는 다음내가 배치 파일을 통해 SQL 쿼리를 실행하려고

잘못된 인수 오류

무엇입니까 나는 사용자 입력 날짜, 데이터 일치를 가져올 때 난 것은 1로 필요한이 내 SQL SCRIPT

: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 

를 실행하려고하고있는 배치 파일입니다 해당 날짜 내가 절은 데이터가 따라 를 가져올 수 있도록 곳에서 해당 날짜를 추가 할 2로 보내고 아래 내가 데이터

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

SQL 배치가 아닙니다. 그리고 Output.txt -v Date = '2016-07-01'은 배치 파일에서 잘라 내지 않습니다! 리다이렉션 다음에 인수가 오면 안됩니다. 오류가있는 곳을 찾기 위해'echo on '을 설정하십시오. 그러나 적어도 내가 지적한 곳은 그렇습니다. –

+0

메시지 102, 수준 15, 상태 1, 서버 데이터베이스 \ instance_name, 줄 28 '2016'근처의 구문이 잘못되었습니다. SQL 파일에서 날짜를 변환하는 동안 오류가 있다고 생각합니다. 대신 전체 날짜를 사용하지 않고 대신 2016을 사용하고 있습니다. –

+2

@ Jean-FrançoisFabre - 사실이 아닙니다. 파일 리디렉션은 명령 내의 모든 위치, 즉 앞, 뒤 또는 중간에 나타날 수 있습니다! OP 명령의 후속 인수는 리디렉션이 아니라 sqlcmd에 대한 인수입니다. – dbenham

답변

0

를 입력 할 where 절 당신이 명령에서 당신이 -v Date = '2016-07-01'를 사용하여 라인, 작은 따옴표는 sqlcmd 변수의 일부로 간주됩니다. 스크립트에서 '$(Date)'을 사용하면 ''2016-07-01''이되며 오류는 아주 분명합니다.

명령 줄 또는 스크립트에서 따옴표 한 세트를 제거하면 모두 작동합니다. 당신이 독 자로부터 보호하거나 공백 또는 쉼표 같은 배치 토큰 구분 기호를 포함하는 명령 줄의 값을 인용 할 경우

는, 당신은 큰 따옴표를 사용해야합니다
-v var = "Some value with spaces" 같은 것을. 이 경우 큰 따옴표는 이 아니며 값에이 포함되지 않습니다.

+0

내가 그걸 확인하고 오류가 해결되었습니다하지만 지금은 내가 내 출력에 전체 테이블을 받고 그 대신 특정 출력을 얻을 수 없다는 내 이전의 언급에서 언급 한 문제입니다 SET \ p D = 날짜를 입력하고 sqlcmd -v Date = "% D %" –

+0

'set \ p'? 나는 당신이'set/P'를 의미한다고 생각합니다. –

관련 문제