TL; DR; Sua instância do SQL Server está usando portas dinâmicas que não estão funcionando. Force o SQL Server a usar a porta estática # 1433.
Detalhes completos : Primeiro de tudo, esse problema é mais provável se você tiver uma combinação de instância padrão e nomeada ou apenas instâncias nomeadas (que foi o meu caso).
Conceito chave : Cada instância do Microsoft SQL Server instalada em um computador usa uma porta diferente para atender às solicitações de conexão recebidas. A instância padrão do SQL Server usa a porta nº 1433. À medida que você instala instâncias nomeadas, elas começam a usar portas dinâmicas, decididas no momento da inicialização do serviço do Windows correspondente à instância nomeada do SQL Server.
Meu código estava falhando (com o código de erro 40) ao conectar-se à única instância nomeada do SQL Server que eu tinha na minha VM. Você pode tentar abaixo as possíveis soluções:
Solução 1 : o código do cliente que tenta se conectar à instância do SQL Server recebe ajuda do serviço de navegador do SQL Server para descobrir o número da porta na qual a instância nomeada está escutando as conexões de entrada. Verifique se o serviço do navegador SQL está sendo executado no seu computador.
Solução 2 : verifique o número da porta (na cor amarela) que sua instância nomeada do SQL Server está usando no gerenciador de configuração do SQL Server, conforme mostrado na captura instantânea abaixo:
Use esse número de porta explicitamente na cadeia de conexão ou com o sqlcmd
mostrado abaixo:
sqlcmd -s mymachinename,11380 -i deleteDB.sql -o SQLDelete.txt
Solução 3 : force a instância nomeada a usar a porta 1433, que é usada por instância padrão. Lembre-se de que isso funcionará apenas se você não tiver nenhuma instância padrão do SQL Server no seu computador, pois a instância padrão do SQL Server já estaria usando a porta # 1433. O mesmo número de porta não pode ser usado por dois serviços diferentes do Windows.
Marque o TCP Dynamic ports
campo em branco e o TCP Port
campo 1433.
Mude o número da porta na sua cadeia de conexão, como mostrado abaixo:
sqlcmd -s mymachinename\instanceName -i deleteDB.sql -o SQLDelete.txt
OU
sqlcmd -s mymachinename,1433 -i deleteDB.sql -o SQLDelete.txt
Nota : Toda alteração nas configurações de TCP / IP requer a reinicialização do serviço correspondente do Windows.
Curiosamente, depois de resolver o erro, quando voltei à configuração de porta dinâmica para reproduzir o mesmo erro, isso não aconteceu. Não sei por que.
Leia abaixo os tópicos interessantes para saber mais sobre as portas dinâmicas do SQL Server:
Como configurar a porta do SQL Server em várias instâncias?
Quando uma porta dinâmica é "dinâmica"?
Quando usar uma porta dinâmica TCP e quando Porta TCP?
Eu tenho pistas para a solução do meu problema neste blog.