TL; DR;Twoja instancja programu SQL Server używa portów dynamicznych, które nie działają. Wymuś program SQL Server, aby używał portu statycznego nr 1433.
Uzupełnij szczegóły : Przede wszystkim ten problem jest bardziej prawdopodobny, jeśli masz połączenie domyślnej i nazwanej instancji lub tylko nazwane instancje (co było moim przypadkiem).
Kluczowa koncepcja : każde wystąpienie programu Microsoft SQL Server zainstalowane na komputerze używa innego portu do nasłuchiwania żądań połączeń przychodzących. Domyślna instancja SQL Server korzysta z portu nr 1433. Po zainstalowaniu nazwanych instancji zaczną one używać portów dynamicznych, co jest ustalane podczas uruchamiania usługi Windows odpowiadającej nazwanej instancji SQL Server.
Mój kod nie mógł połączyć się z jedyną nazwaną instancją SQL Server na mojej maszynie wirtualnej (kod błędu 40). Możesz wypróbować poniżej możliwe rozwiązania:
Rozwiązanie nr 1 : Kod klienta próbujący połączyć się z wystąpieniem SQL Server korzysta z pomocy usługi przeglądarki SQL Server w ustaleniu numeru portu, na którym nazwane wystąpienie nasłuchuje połączeń przychodzących. Upewnij się, że usługa przeglądarki SQL jest uruchomiona na Twoim komputerze.
Rozwiązanie nr 2 : Sprawdź numer portu (w kolorze żółtym), którego używa nazwana instancja programu SQL Server w menedżerze konfiguracji programu SQL Server, jak pokazano na poniższej migawce:
Użyj tego numeru portu jawnie w ciągu połączenia lub z sqlcmd
pokazanymi poniżej:
sqlcmd -s mymachinename,11380 -i deleteDB.sql -o SQLDelete.txt
Rozwiązanie nr 3 : Wymuś nazwane wystąpienie korzystania z portu 1433, który jest używany domyślnie. Pamiętaj, że zadziała to tylko wtedy, gdy nie masz żadnego domyślnego wystąpienia programu SQL Server na swoim komputerze, ponieważ domyślna instancja programu SQL Server będzie już używać portu nr 1433. Ten sam numer portu nie może być używany przez dwie różne usługi systemu Windows.
Zaznacz TCP Dynamic ports
pole jako puste i TCP Port
pole na 1433.
Zmień numer portu w parametrach połączenia, jak pokazano poniżej:
sqlcmd -s mymachinename\instanceName -i deleteDB.sql -o SQLDelete.txt
LUB
sqlcmd -s mymachinename,1433 -i deleteDB.sql -o SQLDelete.txt
Uwaga : każda zmiana ustawień TCP / IP wymaga odpowiedniego ponownego uruchomienia usługi Windows.
Co ciekawe, po usunięciu błędu, gdy wróciłem do dynamicznego ustawienia portu, aby odtworzyć ten sam błąd, to się nie stało. Nie pewny dlaczego.
Przeczytaj poniżej interesujące wątki, aby dowiedzieć się więcej o dynamicznych portach SQL Server:
Jak skonfigurować port SQL Server w wielu instancjach?
Kiedy port dynamiczny jest „dynamiczny”?
Kiedy używać portu dynamicznego TCP, a kiedy portu TCP?
Otrzymałem wskazówki do rozwiązania mojego problemu z tego bloga.