TL; DR; อินสแตนซ์ SQL Server ของคุณกำลังใช้พอร์ตแบบไดนามิกซึ่งไม่ทำงาน บังคับให้ SQL Server ใช้พอร์ตแบบคงที่ # 1433
รายละเอียดที่สมบูรณ์ : ก่อนอื่นปัญหานี้มีแนวโน้มมากขึ้นถ้าคุณมีการผสมผสานของค่าเริ่มต้นและอินสแตนซ์ที่มีชื่อหรืออินสแตนซ์ที่ตั้งชื่อเท่านั้น (ซึ่งเป็นกรณีของฉัน)
แนวคิดหลัก : แต่ละอินสแตนซ์ของ Microsoft SQL Server ที่ติดตั้งบนคอมพิวเตอร์ใช้พอร์ตอื่นเพื่อฟังคำขอการเชื่อมต่อขาเข้า อินสแตนซ์เริ่มต้นของ SQL Server ใช้พอร์ต # 1433 ในขณะที่คุณติดตั้งอินสแตนซ์ที่มีชื่อจากนั้นพวกเขาจะเริ่มใช้พอร์ตแบบไดนามิกซึ่งจะตัดสินใจเมื่อเริ่มต้นบริการ Windows ที่สอดคล้องกับอินสแตนซ์ SQL Server ที่มีชื่อ
รหัสของฉันล้มเหลว (พร้อมรหัสข้อผิดพลาด 40) เพื่อเชื่อมต่อกับอินสแตนซ์ SQL Server ชื่อเดียวที่ฉันมีบน VM ของฉัน คุณสามารถลองวิธีแก้ปัญหาที่เป็นไปได้ด้านล่าง:
โซลูชัน # 1 : รหัสไคลเอนต์ที่พยายามเชื่อมต่อกับอินสแตนซ์ของ SQL Server รับความช่วยเหลือจากบริการเบราว์เซอร์ SQL Server เพื่อหาหมายเลขพอร์ตที่อินสแตนซ์ที่คุณตั้งชื่อไว้คอยรับฟังการเชื่อมต่อขาเข้า ตรวจสอบให้แน่ใจว่าบริการเบราว์เซอร์ SQL ทำงานบนคอมพิวเตอร์ของคุณ
โซลูชัน # 2 : ตรวจสอบพอร์ต # (สีเหลือง) อินสแตนซ์ SQL Server ของคุณชื่อใช้จากตัวจัดการการกำหนดค่าเซิร์ฟเวอร์ SQL ตามที่แสดงในภาพรวมด้านล่าง:
ใช้หมายเลขพอร์ตนั้นอย่างชัดเจนในสตริงการเชื่อมต่อของคุณหรือตามที่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 ในหลายอินสแตนซ์
Dynamic Port“ ไดนามิก” เมื่อใด
เมื่อใดจึงจะใช้ TCP ไดนามิกพอร์ตและพอร์ต TCP เมื่อใด
ผมได้นำไปสู่ทางออกของปัญหาของฉันจากนี้บล็อก