Avatar billede danskov Nybegynder
01. august 2008 - 09:52 Der er 2 kommentarer og
1 løsning

Brug af errorlevel variablen i DOS command line med sqlcmd

Hej,

Jeg forsøger at gøre følgende:

FOR.BAT:
FOR /F %%I IN (File.txt) DO (
sqlcmd -S KCWS010 -i %%I -b -E
ECHO %ERRORLEVEL%
IF %ERRORLEVEL% NEQ 1 GOTO Error
)
pause
GOTO :EOF
:Error
ECHO %~n0 "Der er sket en fejl tjek loggen"
ECHO.
pause

File.txt:
sql\Opdateringsscript1.sql
sql\Opdateringsscript2.sql

sql\Opdateringsscript1.sql:
SELECT 1
:EXIT(SELECT 1)

Ifølge alt dokumentation jeg kan finde burde %ERRORLEVEL% blive sat til 1 så jeg kan bruge den i min fejlhåndtering, men jeg får følgende output:

C:\Test\Test>(
sqlcmd -S KCWS010 -i sql\Opdateringsscript1.sql -b -E
ECHO 0
IF 0 NEQ 1 GOTO Error
)

-----------
          1

(1 rows affected)

-----------
          1

(1 rows affected)
0

C:\Test\Test>ECHO for "Der er sket en fejl tjek loggen"

Hvis jeg derimod ikke bruger en for løkke men bare laver:
UdenFOR.BAT:
sqlcmd -S KCWS010 -i sql\Opdateringsscript1.sql  -b -E
ECHO %ERRORLEVEL%

Så får jeg:
C:\Test\Test>sqlcmd -S KCWS010 -i sql\Opdateringsscript1.sql  -b -E

-----------
          1

(1 rows affected)

-----------
          1

(1 rows affected)

C:\Test\Test>ECHO 1
1

Det giver da ingen mening. Er der en måde at komme uden om det på?
Jeg har også forsøgt mig med RAISERROR('Taking the easy way out', 16, 127), som det bliver foreslået rundt omkring.
På forhånd tak.
Avatar billede enhydralutris Nybegynder
01. august 2008 - 21:47 #1
okay..

IF %ERRORLEVEL% NEQ 1 GOTO Error
og
IF 0 NEQ 1 GOTO Error

Denne funktion har syntaksen:

IF /I %ERRORLEVEL% NEQ 1 GOTO Error
og
IF /I 0 NEQ 1 GOTO Error

... Håber det hjælper ;D
Avatar billede enhydralutris Nybegynder
01. august 2008 - 21:54 #2
var ment som et svar (#1) ;-D
Avatar billede danskov Nybegynder
04. august 2008 - 10:03 #3
Hej, tak for svaret.
Jeg har kigget lidt på den parameter du sætter på og så vidt jeg kan se gør den kun det at den sørger for at man kan sammenligne eksempelvis strenge og tal.
mit problem er at jeg ikke får den rigtige værdi tilbage i ERRORLEVEL variablen når jeg eksekvere noget sql via sqlcmd og afslutter sql scriptet med :EXIT(SELECT 1), hvilket burde sætte ERRORLEVEL til 1, men den forbliver 0.
Er der nogen andre gode bud? :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester