"Pero, ¿por qué...?"
Para aquellos interesados en por qué SQL Server Management Studio (SSMS) puede conectarse a servername\instance
mientras que otras aplicaciones (como nuestras aplicaciones pyodbc) no pueden hacerlo, se debe a que SSMS mantiene una lista de números de puerto MRU (Usados más recientemente) en el registro de Windows en
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\SuperSocketNetLib\LastConnect
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\MSSQLServer\Client\SuperSocketNetLib\LastConnect
Cada entrada de MRU (valor de registro) se parece a esto:
Name: PANORAMA\SQLEXPRESS
Type: REG_SZ
Data: -1006030326:tcp:PANORAMA,52865
Una vez que SSMS se haya conectado correctamente por nombre de instancia a través del servicio SQL Browser en la máquina remota, puede continuar conectándose por nombre de instancia incluso si SQL Browser ya no se está ejecutando en la máquina remota, siempre que el número de puerto no haya cambiado. Las aplicaciones que no usan esta lista de MRU (como nuestra aplicación pyodbc) deben tener el servicio de navegador SQL ejecutándose en la máquina remota cada vez que quieran conectarse por nombre de instancia.
El escenario más común:
- Quiero conectarme a
YOUR-PC\SQLEXPRESS
. Intento hacerlo desde SSMS enMY-PC
, pero no funciona porque el navegador SQL se instaló con el "Modo de inicio" establecido en "Manual" enYOUR-PC
. - Le pido que inicie el servicio SQL Browser en
YOUR-PC
, y usted cumple amablemente, pero simplemente inicia el servicio y se olvida de cambiar la configuración del "Modo de inicio" a "Automático". - Puedo conectarme a través de SSMS (que almacena en caché el
YOUR-PC\SQLEXPRESS
puerto en la MRU). Mi aplicación Python también puede conectarse. - Después de la próxima vez
YOUR-PC
se reinicia, puedo conectarme a través de SSMS (a través de MRU) pero mi aplicación de python no puede (porque el servicio del navegador SQL ya no se ejecuta enYOUR-PC
).