2012-05-03 3 views

답변

12

-o sqlcmd 플래그를 사용하거나 표준 > 리디렉터를 사용하여 실행 결과를 텍스트 파일에 쉽게 저장할 수 있습니다. 그런 다음 열 머리글 (플래그 -h)을 제거하고 SQL Server (SET NOCOUNT ON)에서 행 개수를 제거하여이 파일의 서식을 지정할 수 있습니다.

SQLCMD -E -S devserver -Q "SET NOCOUNT ON; SELECT COUNT(1) FROM Cases" -h -1 
    > result.txt 

을 그리고

set /p value=< result.txt 
echo %value% 
+0

단지가 본 일이었다에서 답을 필요하지 않습니다, 당신의도'-h를 포함하는 내 대답을 게시 후 - 1 '옵션. –

+1

부분적으로 ... 어떻게 DOS 배치 파일에 값을 다시 가져 옵니까? – SteveC

+1

그러면 @ Christian.K 솔루션 (FOR 사용)이 명령의 결과를 평가 한 다음 일괄 변수에 할당 할 수 있기 때문에 빈 문자열을 피하기 위해 간단한 테스트 만 추가하면되므로 더 잘 어울릴 것입니다. –

12

당신은 피할 수 ...로 값을 다시 읽어

다음 스크립트는 COUNT(1)의 가치와 줄 바꿈으로 파일 result.txt을 생성합니다 임시 파일 인 sqlcmd.exe을 배치 명령을 사용하여 호출합니다.

for /F usebackq %%i in (`sqlcmd -E -S "devserver,4711" -h-1 -Q "SET NOCOUNT ON; SELECT COUNT(1) ..."`) do (
    set count=%%i 
) 

if not defined count (
    echo Failed to execute SQL statement 1>&2 
) else (
    echo %count% 
) 

일부 노트 :

  • 명령 줄 즉, %i 대신 -h-1 옵션은 열 머리글을 억제하는 sqlcmd.exe을 알려줍니다
  • %%i의를 사용하여 대화 형 CMD.EXE 세션에서 호출 때문에 출력이 정말 유일한 경우 한 줄의 텍스트.
  • 전체 "서버, 포트"사양을 큰 따옴표로 묶어야한다는 것을 나타 내기 위해 허위 포트 4711을 서버와 사용했습니다. 그렇지 않으면 CMD의 명령 줄 구문 분석 규칙으로 인해 sqlcmd은 서버와 포트를 별개의 인수로보고 실패합니다.
4

@GerardoLima의 답변은 90 % 정도였습니다. 선행 공백을 제거하려면 입력 값을 set /a으로 평가해야합니다.

이 @ Christian.K

SQLCMD -E -S devserver -Q "SET NOCOUNT ON; SELECT COUNT(1) FROM Cases" -h -1 > result.txt 
set /p raw=< result.txt 
echo '%raw%' 
set /a value=%raw% 
echo '%value%' 

내 출력이

'   0' 
'0'