ver valor usuarios usuario stored salida retornar procedimiento parametros obtener ejemplo ejecutar conectados con almacenado actual sql-server batch-file dos sqlcmd

sql server - usuarios - Accediendo al valor devuelto de una instrucción SQL en SQLCMD



retornar valor stored procedure sql server (3)

Estoy tratando de obtener el valor de una declaración SQL cuando la ejecuto en un archivo por lotes de DOS ...

sqlcmd -E -S DEVSERVER -Q "SELECT COUNT(1) as [CaseCount] FROM Cases"

No estoy buscando el nivel de error como en esta pregunta de stackoverflow , sino que estoy buscando el conteo real devuelto por la base de datos, así que puedo hacer algo de lógica adicional.


Puede evitar un archivo extra / temporal, llamando a sqlcmd.exe utilizando el comando FOR batch:

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% )

Algunas notas:

  • Si se llama desde una sesión CMD.EXE interactiva, es decir, la línea de comando, use %i vez de %%i
  • La opción -h-1 le dice a sqlcmd.exe que suprima los encabezados de columna, por lo que el resultado es realmente solo una línea de texto.
  • Usé un puerto ficticio 4711 con el servidor, para mostrar que necesita poner la especificación completa "servidor, puerto" entre comillas dobles. De lo contrario, debido a las reglas de análisis de línea de comandos de CMD, sqlcmd vería el servidor y el puerto como argumentos distintos y fallaría.

Puede guardar fácilmente el resultado de la ejecución en un archivo de texto, ya sea usando el indicador -o sqlcmd o usando el redirector estándar. A continuación, puede formatear este archivo eliminando el encabezado de columna (marcar -h ) y eliminando el recuento de filas de SQL Server ( SET NOCOUNT ON ).

El siguiente script generará un archivo result.txt con solo el valor de COUNT(1) y un salto de línea:

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

Y luego lee el valor de nuevo con ...

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


La respuesta de @GerardoLima fue el 90% del camino hasta allí. También necesita evaluar el valor de entrada con set /a para quitar el espacio en blanco inicial.

Esto no es necesario con la respuesta de @ 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%''

Mi salida fue

'' 0'' ''0''