TL; DR; Su instancia de SQL Server está utilizando puertos dinámicos que no funciona. Forzar a SQL Server a usar el puerto estático # 1433.
Detalles completos : en primer lugar, este problema es más probable si tiene una combinación de instancias predeterminadas y con nombre o solo con nombre (que fue mi caso).
Concepto clave : cada instancia de Microsoft SQL Server instalada en una computadora utiliza un puerto diferente para escuchar las solicitudes de conexión entrantes. La instancia predeterminada de SQL Server usa el puerto n. ° 1433. A medida que instale instancias con nombre, comenzarán a usar puertos dinámicos, lo que se decide en el momento del inicio del servicio de Windows correspondiente a la instancia de SQL Server con nombre.
Mi código estaba fallando (con el código de error 40) para conectarse a la única instancia de SQL Server con nombre que tenía en mi VM. Puede probar a continuación las posibles soluciones:
Solución n. ° 1 : el código del cliente que intenta conectarse a la instancia de SQL Server requiere la ayuda del servicio del navegador de SQL Server para determinar el número de puerto en el que su instancia con nombre escucha las conexiones entrantes. Asegúrese de que el servicio del navegador SQL se esté ejecutando en su computadora.
Solución n. ° 2 : Verifique el n. ° de puerto (en color amarillo) que su instancia de SQL Server nombrada está utilizando desde el administrador de configuración de SQL Server como se muestra en la siguiente instantánea:
Use ese número de puerto explícitamente en su cadena de conexión o como se sqlcmd
muestra a continuación:
sqlcmd -s mymachinename,11380 -i deleteDB.sql -o SQLDelete.txt
Solución n. ° 3 : obligue a su instancia con nombre a usar el puerto n. ° 1433, que se usa de manera predeterminada. Recuerde que esto solo funcionará si no tiene ninguna instancia predeterminada de SQL Server en su computadora, ya que la instancia predeterminada de SQL Server la usaría utilizando el puerto # 1433 ya. El mismo número de puerto no puede ser utilizado por dos servicios diferentes de Windows.
Marque el TCP Dynamic ports
campo en blanco y el TCP Port
campo en 1433.
Cambie el número de puerto en su cadena de conexión como se muestra a continuación:
sqlcmd -s mymachinename\instanceName -i deleteDB.sql -o SQLDelete.txt
O
sqlcmd -s mymachinename,1433 -i deleteDB.sql -o SQLDelete.txt
Nota : Cada cambio en la configuración de TCP / IP requiere el reinicio del servicio de Windows correspondiente.
Curiosamente, después de resolver el error cuando volví a la configuración del puerto dinámico para reproducir el mismo error, no sucedió. No estoy seguro de por qué.
Lea a continuación los hilos interesantes para saber más sobre los puertos dinámicos de SQL Server:
¿Cómo configurar el puerto del servidor SQL en varias instancias?
¿Cuándo es un puerto dinámico "dinámico"?
¿Cuándo usar un puerto dinámico TCP y cuándo puerto TCP?
Obtuve pistas para la solución de mi problema de este blog.