2014-11-03 2 views
1

다음은 내 쿼리라고 가정합니다.SQLCMD - SQL Server 작업

DECLARE @INT INT 
SET @INT = (SELECT COUNT(1) FROM MyTable) 
IF (@INT = 0) 
RAISERROR('Fail',16,1) 

이 쿼리를 사용하고 "Operating System (CmdExec)"유형을 사용하여 SQL Server 작업을 만들고 싶습니다. @INT <> 0이면 SQL 작업 단계가 성공하고 @INT = 0이면 실패합니다.

어떻게 cmd를 작성할 수 있습니까?

내 시도 (작동하지 않음) ... 서버가 내가 작업을 설정하는 위치와 다릅니다.

sqlcmd -S 123.45.67.890 -E -V15 -d MyDB -Q "DECLARE @INT INT 
SET @INT = (SELECT COUNT(1) FROM MyTable) 
IF (@INT = 0) 
RAISERROR('Fail',16,1)" -b 

작업 실패 메시지.

사용자 : LocalSVR \ USER로 실행됩니다. 메시지 105, 수준 15, 상태 1, 서버 RemoteSVR, 줄 1 'DECLARE @ INT INT'문자열 뒤에 닫히지 않은 따옴표. 프로세스 종료 코드 15. 단계가 실패했습니다.

MyTable에 1 개 이상의 레코드가있는 것과 같은 이유로 단계가 실패합니다.

업데이트 : Scott의 제안에 따라 서식을 변경 (줄 바꿈 제거)하여 작동하는 것 같습니다. @ 스콧, 답변으로 의견을 표시하는 방법을 모르겠습니다. 응답을 작성할 수 있다면 대답으로 표시 할 것입니다. 건배!!!

+2

그것이 포맷 정확히 어떻게인가를주고 실패 할 것을 의미합니다 사용하여 해당 라운드 얻을 수 있습니다 작업? Sqlcmd는 쿼리가 여러 줄에 걸쳐있는 것을 좋아하지 않을 것입니다. 줄 바꿈을 제거하면 작동 할 수 있습니다. –

+0

음 ... 와우 !! 이것이 그랬다고 생각해. ..lol 고마워.이 팁은 @ScottTeibert. 건배! – 007

답변

0

단일 쿼리와 달리 여러 줄을 실행하려고합니다. NOT은 -b (오류 배치에이 중단) 것을

SQLCMD -b -S"MyServer" -d"MyDatabase" -Q"IF NOT EXISTS(SELECT * FROM MyTable) RAISERROR('Fail',16,1)" 

참고있는 경우 당신은 옵션 SQLCMD 자체가 당신에게 트래핑 ErrorLevel에