TL, DR; Votre instance SQL Server utilise des ports dynamiques qui ne fonctionnent pas. Forcer SQL Server à utiliser le port statique # 1433.
Détails complets : Tout d'abord, ce problème est plus probable si vous avez un mélange d'instances par défaut et nommées ou d'instances nommées uniquement (ce qui était mon cas).
Concept clé : chaque instance de Microsoft SQL Server installée sur un ordinateur utilise un port différent pour écouter les demandes de connexion entrantes. L'instance par défaut de SQL Server utilise le port # 1433. Lorsque vous installez des instances nommées, elles commenceront à utiliser des ports dynamiques, ce qui est décidé au moment du démarrage du service Windows correspondant à l'instance SQL Server nommée.
Mon code ne parvenait pas (avec le code d'erreur 40) à se connecter à la seule instance SQL Server nommée que j'avais sur ma machine virtuelle. Vous pouvez essayer ci-dessous les solutions possibles:
Solution n ° 1 : le code client essayant de se connecter à l'instance SQL Server prend l'aide du service de navigateur SQL Server pour déterminer le numéro de port sur lequel votre instance nommée écoute les connexions entrantes. Assurez-vous que le service de navigateur SQL est en cours d'exécution sur votre ordinateur.
Solution n ° 2 : vérifiez le numéro de port (en couleur jaune) que votre instance nommée de SQL Server utilise à partir du gestionnaire de configuration SQL Server, comme indiqué dans l'instantané ci-dessous:
Utilisez ce numéro de port explicitement dans votre chaîne de connexion ou avec sqlcmd
ci-dessous:
sqlcmd -s mymachinename,11380 -i deleteDB.sql -o SQLDelete.txt
Solution n ° 3 : forcez votre instance nommée à utiliser le port n ° 1433 qui est utilisé par l'instance par défaut. N'oubliez pas que cela ne fonctionnera que si vous n'avez aucune instance SQL Server par défaut sur votre ordinateur, car l'instance SQL Server par défaut utilise déjà le port # 1433. Le même numéro de port ne peut pas être utilisé par deux services Windows différents.
Marquez le TCP Dynamic ports
champ vide et le TCP Port
champ 1433.
Modifiez le numéro de port dans votre chaîne de connexion comme indiqué ci-dessous:
sqlcmd -s mymachinename\instanceName -i deleteDB.sql -o SQLDelete.txt
OU
sqlcmd -s mymachinename,1433 -i deleteDB.sql -o SQLDelete.txt
Remarque : chaque modification des paramètres TCP / IP nécessite un redémarrage du service Windows correspondant.
Il est intéressant de noter qu'après avoir résolu l'erreur lorsque je suis retourné au paramètre de port dynamique pour reproduire la même erreur, cela ne s'est pas produit. Pas certain de pourquoi.
Veuillez lire ci-dessous les discussions intéressantes pour en savoir plus sur les ports dynamiques de SQL Server:
Comment configurer le port SQL Server sur plusieurs instances?
Quand un port dynamique est-il «dynamique»?
Quand utiliser un port dynamique TCP et quand utiliser un port TCP?
J'ai obtenu des pistes pour résoudre mon problème à partir de ce blog.