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?
З цього блогу я отримав підводи до вирішення своєї проблеми .