TL; DR; Contoh SQL Server Anda menggunakan port dinamis yang tidak berfungsi. Memaksa SQL Server untuk menggunakan porta statis # 1433.
Detail Lengkap : Pertama-tama masalah ini lebih mungkin terjadi jika Anda hanya memiliki campuran instance default dan bernama atau instance bernama (yang merupakan kasus saya).
Konsep kunci : Setiap instance Microsoft SQL Server yang diinstal pada komputer menggunakan porta yang berbeda untuk mendengarkan permintaan koneksi yang masuk. Contoh default dari SQL Server menggunakan port # 1433. Ketika Anda menginstal instance bernama maka mereka akan mulai menggunakan port dinamis yang diputuskan pada saat start-up dari layanan Windows yang sesuai dengan instance SQL Server bernama.
Kode saya gagal (dengan kode kesalahan 40) terhubung ke satu-satunya contoh bernama SQL Server yang saya miliki di VM saya. Anda dapat mencoba solusi di bawah ini:
Solusi # 1 : Kode klien yang mencoba terhubung ke instance SQL Server membutuhkan bantuan dari layanan browser SQL Server untuk mencari tahu nomor port di mana instance Anda bernama sedang mendengarkan koneksi yang masuk. Pastikan layanan browser SQL berjalan di komputer Anda.
Solusi # 2 : Periksa port # (dalam warna kuning) yang digunakan contoh SQL Server bernama Anda dari manajer konfigurasi SQL Server seperti yang ditunjukkan dalam snapshot di bawah ini:
Gunakan nomor port itu secara eksplisit dalam string koneksi Anda atau dengan yang sqlcmd
ditunjukkan di bawah ini:
sqlcmd -s mymachinename,11380 -i deleteDB.sql -o SQLDelete.txt
Solusi # 3 : Paksa instance bernama Anda untuk menggunakan port # 1433 yang digunakan secara default. Ingat ini hanya akan berfungsi jika Anda tidak memiliki instance SQL Server default di komputer Anda karena instance SQL Server default sudah menggunakan port # 1433. Nomor port yang sama tidak dapat digunakan oleh dua layanan Windows yang berbeda.
Tandai TCP Dynamic ports
bidang ke kosong dan TCP Port
bidang ke 1433.
Ubah nomor port di string koneksi Anda seperti yang ditunjukkan di bawah ini:
sqlcmd -s mymachinename\instanceName -i deleteDB.sql -o SQLDelete.txt
ATAU
sqlcmd -s mymachinename,1433 -i deleteDB.sql -o SQLDelete.txt
Catatan : Setiap perubahan dalam pengaturan TCP / IP memerlukan restart layanan Windows yang sesuai.
Cukup menarik setelah menyelesaikan kesalahan ketika saya kembali ke pengaturan port dinamis untuk mereproduksi kesalahan yang sama maka itu tidak terjadi. Tidak yakin kenapa.
Silakan baca di bawah utas menarik untuk mengetahui lebih lanjut tentang port dinamis SQL Server:
Bagaimana cara mengkonfigurasi SQL Server Port pada banyak instance?
Kapan Port Dinamis “dinamis”?
Kapan menggunakan port dinamis TCP dan kapan Port TCP?
Saya mendapat petunjuk tentang solusi masalah saya dari blog ini .