TL; DR; Ihre SQL Server-Instanz verwendet dynamische Ports, die nicht funktionieren. Erzwingen Sie, dass SQL Server den statischen Port Nr. 1433 verwendet.
Vollständige Details : Erstens ist dieses Problem wahrscheinlicher, wenn Sie eine Mischung aus Standard- und benannten Instanzen oder nur benannten Instanzen haben (was mein Fall war).
Schlüsselkonzept : Jede auf einem Computer installierte Instanz von Microsoft SQL Server verwendet einen anderen Port, um auf eingehende Verbindungsanforderungen zu warten. Die Standardinstanz von SQL Server verwendet Port Nr. 1433. Wenn Sie benannte Instanzen installieren, werden dynamische Ports verwendet, die zum Zeitpunkt des Starts des Windows-Dienstes festgelegt werden, der der benannten SQL Server-Instanz entspricht.
Mein Code konnte (mit Fehlercode 40) keine Verbindung zu der einzigen benannten SQL Server-Instanz herstellen, die ich auf meiner VM hatte. Sie können unten mögliche Lösungen ausprobieren:
Lösung 1 : Der Clientcode, der versucht, eine Verbindung zur SQL Server-Instanz herzustellen, verwendet die Hilfe des SQL Server-Browserdienstes, um die Portnummer zu ermitteln, unter der Ihre benannte Instanz auf eingehende Verbindungen wartet. Stellen Sie sicher, dass der SQL-Browserdienst auf Ihrem Computer ausgeführt wird.
Lösung 2 : Überprüfen Sie die Portnummer (in gelber Farbe), die Ihre benannte SQL Server-Instanz verwendet, im SQL Server-Konfigurationsmanager, wie im folgenden Snapshot gezeigt:
Verwenden Sie diese Portnummer explizit in Ihrer Verbindungszeichenfolge oder mit sqlcmd
der folgenden Abbildung:
sqlcmd -s mymachinename,11380 -i deleteDB.sql -o SQLDelete.txt
Lösung 3 : Erzwingen Sie, dass Ihre benannte Instanz den Port 1433 verwendet, der von der Standardinstanz verwendet wird. Denken Sie daran, dass dies nur funktioniert, wenn Sie keine Standard-SQL Server-Instanz auf Ihrem Computer haben, da die Standard-SQL Server-Instanz bereits Port 1433 verwenden würde. Dieselbe Portnummer kann nicht von zwei verschiedenen Windows-Diensten verwendet werden.
Markieren Sie das TCP Dynamic ports
Feld als leer und das TCP Port
Feld als 1433.
Ändern Sie die Portnummer in Ihrer Verbindungszeichenfolge wie folgt:
sqlcmd -s mymachinename\instanceName -i deleteDB.sql -o SQLDelete.txt
ODER
sqlcmd -s mymachinename,1433 -i deleteDB.sql -o SQLDelete.txt
Hinweis : Jede Änderung der TCP / IP-Einstellungen erfordert einen entsprechenden Neustart des Windows-Dienstes.
Interessanterweise ist es nach der Behebung des Fehlers, als ich zur dynamischen Porteinstellung zurückkehrte, um denselben Fehler zu reproduzieren, nicht aufgetreten. Nicht sicher warum.
Bitte lesen Sie unten interessante Threads, um mehr über dynamische Ports von SQL Server zu erfahren:
Wie konfiguriere ich den SQL Server-Port auf mehreren Instanzen?
Wann ist ein dynamischer Port „dynamisch“?
Wann wird ein dynamischer TCP-Port verwendet und wann ein TCP-Port?
Ich habe Hinweise zur Lösung meines Problems von diesem Blog erhalten.