TL; DR; Ваш экземпляр SQL Server использует динамические порты, которые не работают. Заставить SQL Server использовать статический порт # 1433.
Полная информация : Во-первых, эта проблема более вероятна, если у вас есть смесь только по умолчанию и именованного экземпляра или только именованных экземпляров (что было в моем случае).
Концепция ключа : каждый экземпляр Microsoft SQL Server, установленный на компьютере, использует свой порт для прослушивания входящих запросов на подключение. Экземпляр SQL Server по умолчанию использует порт № 1433. Когда вы устанавливаете именованные экземпляры, они начинают использовать динамические порты, которые определяются во время запуска службы Windows, соответствующей именованному экземпляру SQL Server.
Мой код не смог (с кодом ошибки 40) соединиться с единственным именованным экземпляром SQL Server, который был у меня на моей виртуальной машине. Вы можете попробовать следующие возможные решения:
Решение № 1 : клиентский код, пытающийся подключиться к экземпляру SQL Server, получает справку из службы браузера SQL Server, чтобы выяснить номер порта, по которому ваш именованный экземпляр прослушивает входящие подключения. Убедитесь, что на вашем компьютере запущена служба браузера SQL.
Решение № 2 : проверьте порт # (желтым цветом), который использует ваш именованный экземпляр SQL Server, из диспетчера конфигурации SQL Server, как показано на снимке ниже:
Используйте этот номер порта явно в строке подключения или с sqlcmd
, показанным ниже:
sqlcmd -s mymachinename,11380 -i deleteDB.sql -o SQLDelete.txt
Решение # 3 : Принудительно использовать ваш именованный экземпляр для использования порта # 1433, который используется экземпляром по умолчанию. Помните, что это будет работать, только если у вас нет экземпляра SQL Server по умолчанию на вашем компьютере, так как экземпляр SQL Server по умолчанию уже использует порт # 1433. Один и тот же номер порта не может использоваться двумя разными службами Windows.
Отметьте TCP Dynamic ports
поле пустым и TCP Port
поле 1433.
Измените номер порта в строке подключения, как показано ниже:
sqlcmd -s mymachinename\instanceName -i deleteDB.sql -o SQLDelete.txt
ИЛИ
sqlcmd -s mymachinename,1433 -i deleteDB.sql -o SQLDelete.txt
Примечание : Каждое изменение настроек TCP / IP требует соответствующего перезапуска службы Windows.
Интересно, что после устранения ошибки, когда я вернулся к настройке динамического порта, чтобы воспроизвести ту же ошибку, чего не произошло. Не знаю почему.
Пожалуйста, прочитайте ниже интересные темы, чтобы узнать больше о динамических портах SQL Server:
Как настроить порт SQL Server для нескольких экземпляров?
Когда динамический порт является «динамическим»?
Когда использовать динамический порт TCP, а когда - порт TCP?
Я получил сообщение о решении моей проблемы из этого блога.