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?
Я получил приводит к решению моей проблемы из этого блога.