TL; DR; L'istanza di SQL Server utilizza porte dinamiche che non funzionano. Impone a SQL Server di utilizzare la porta statica # 1433.
Dettagli completi : prima di tutto questo problema è più probabile se hai un mix di istanza predefinita e denominata o solo istanze denominate (che era il mio caso).
Concetto chiave : ogni istanza di Microsoft SQL Server installata su un computer utilizza una porta diversa per ascoltare le richieste di connessione in arrivo. L'istanza predefinita di SQL Server utilizza la porta n. 1433. Man mano che si installano le istanze denominate, queste inizieranno a utilizzare porte dinamiche decise al momento dell'avvio del servizio Windows corrispondente all'istanza denominata di SQL Server.
Il mio codice non riusciva (con il codice di errore 40) a connettersi all'unica istanza denominata di SQL Server che avevo sulla mia macchina virtuale. Di seguito puoi provare le possibili soluzioni:
Soluzione n. 1 : il codice client che tenta di connettersi all'istanza di SQL Server richiede assistenza dal servizio browser SQL Server per capire il numero di porta su cui l'istanza denominata è in ascolto per le connessioni in entrata. Assicurarsi che il servizio browser SQL sia in esecuzione sul computer.
Soluzione n. 2 : controllare il numero di porta (in colore giallo) utilizzato dall'istanza di SQL Server dal gestore della configurazione di SQL Server come mostrato nell'istantanea di seguito:
Utilizzare quel numero di porta esplicitamente nella stringa di connessione o con sqlcmd
mostrato di seguito:
sqlcmd -s mymachinename,11380 -i deleteDB.sql -o SQLDelete.txt
Soluzione n. 3 : imponi all'istanza denominata di utilizzare la porta n. 1433 utilizzata dall'istanza predefinita. Ricorda che funzionerà solo se non hai alcuna istanza predefinita di SQL Server sul tuo computer poiché l'istanza predefinita di SQL Server utilizzerà già la porta # 1433. Lo stesso numero di porta non può essere utilizzato da due diversi servizi Windows.
Contrassegna il TCP Dynamic ports
campo in bianco e il TCP Port
campo in 1433.
Modificare il numero di porta nella stringa di connessione come mostrato di seguito:
sqlcmd -s mymachinename\instanceName -i deleteDB.sql -o SQLDelete.txt
O
sqlcmd -s mymachinename,1433 -i deleteDB.sql -o SQLDelete.txt
Nota : ogni modifica delle impostazioni TCP / IP richiede il riavvio del servizio Windows corrispondente.
Abbastanza interessante dopo aver risolto l'errore quando sono tornato alle impostazioni della porta dinamica per riprodurre lo stesso errore, allora non è successo. Non so perché.
Leggi di seguito interessanti discussioni per saperne di più sulle porte dinamiche di SQL Server:
Come configurare la porta di SQL Server su più istanze?
Quando una porta dinamica è "dinamica"?
Quando utilizzare una porta dinamica TCP e quando porta TCP?
Questo blog mi ha portato a risolvere il mio problema .