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 asqlcmd.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''