내가 도스 배치 파일을 실행할 때 SQL 문의 값을 얻으려고에 SQL 문의 반환 값을 액세스 이 stackoverflow 질문에서와 같은 오류 수준, 오히려 나는 실제 카운트가 데이터베이스에서 반환 된 후, 그래서 내가 몇 가지 추가적인 논리를 할 수 있습니다.는</p> <pre><code>sqlcmd -E -S DEVSERVER -Q "SELECT COUNT(1) as [CaseCount] FROM Cases" </code></pre> <p>난 후 아니에요 ... SQLCMD
11
A
답변
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%
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'
단지가 본 일이었다에서 답을 필요하지 않습니다, 당신의도'-h를 포함하는 내 대답을 게시 후 - 1 '옵션. –
부분적으로 ... 어떻게 DOS 배치 파일에 값을 다시 가져 옵니까? – SteveC
그러면 @ Christian.K 솔루션 (FOR 사용)이 명령의 결과를 평가 한 다음 일괄 변수에 할당 할 수 있기 때문에 빈 문자열을 피하기 위해 간단한 테스트 만 추가하면되므로 더 잘 어울릴 것입니다. –