10

I'm trying to set the output of a sqlcmd query to a variable in a batch file.

Here's my query:

sqlcmd -S <SERVER> -d <DATABASE> -Q "select max(Column1)+1 from Table1"

This gives me exactly what I would expect and what I want:

-----------
         10
<1 rows affected>

However, when I try to set it to a variable, I used this script:

for /f %%a in ('sqlcmd -S <SERVER> -d <DATABASE> -Q "select max(Column1)+1 from Table1"') 
    do set ColumnVar=%%a
echo %ColumnVar%
pause

This gives me this result instead: <1 rows affected> I'm guessing this is because the loop is setting the variable to the last line. So is there a way I could use tokens and delims to parse out the 10 instead?

3
  • I'm not 100% sure, but this SO post may help Commented Dec 23, 2014 at 16:35
  • Thank you, I didn't see that question when I was searching. Commented Dec 23, 2014 at 16:39
  • 1
    Hello, this won't work unless you put the do command on the same line as the for loop Commented Apr 9, 2020 at 18:02

1 Answer 1

10

Try turning on NOCOUNT:

for /f %%a in ('sqlcmd -S <SERVER> -d <DATABASE> -Q "SET NOCOUNT ON; select max(Column1)+1 from Table1"') do set ColumnVar=%%a
echo %ColumnVar%
pause
Sign up to request clarification or add additional context in comments.

2 Comments

That works perfect. Only one thing I had to modify was change "delims=" to "delims= " to get just the numerical output. Thank you kind sir!
I am storing the sql command in a batch variable; Can you suggest me how can i do this with my variable?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.