คำตอบที่เลือกและบางคนก็ดีทั้งหมด ฉันแค่ต้องการให้คำอธิบายที่ชัดเจนยิ่งขึ้นแก่ SQL มันมาถึงโซลูชันเดียวกันที่ไม่มีเจ้าของฐานข้อมูล (ถูกต้อง)
บัญชีเจ้าของฐานข้อมูลdbo
ที่กล่าวถึงข้อผิดพลาดจะถูกสร้างด้วยฐานข้อมูลเสมอ ดังนั้นมันจึงดูแปลกที่มันไม่มีอยู่ แต่คุณสามารถตรวจสอบได้ด้วยสองตัวเลือก (หรืออย่างใดอย่างหนึ่ง แต่ให้ง่าย ๆ )
SELECT [name],[sid]
FROM [DB_NAME].[sys].[database_principals]
WHERE [name] = 'dbo'
ซึ่งแสดง SID ของdbo
ผู้ใช้ในฐานข้อมูล DB_NAME และ
SELECT [name],[sid]
FROM [sys].[syslogins]
เพื่อแสดงการเข้าสู่ระบบทั้งหมด (และ SID) สำหรับอินสแตนซ์ของเซิร์ฟเวอร์ SQL นี้ โปรดสังเกตว่ามันไม่ได้เขียนคำนำหน้า db_name ใด ๆ นั่นเป็นเพราะทุกฐานข้อมูลมีข้อมูลเดียวกันในมุมมองนั้น
ดังนั้นในกรณีที่มีข้อผิดพลาดด้านบนจะไม่มีเข้าสู่ระบบด้วย SID ที่กำหนดให้กับผู้ใช้ฐานข้อมูล dbo
ตามที่อธิบายไว้ข้างต้นซึ่งมักจะเกิดขึ้นเมื่อกู้คืนฐานข้อมูลจากคอมพิวเตอร์เครื่องอื่น (ซึ่งฐานข้อมูลและผู้ใช้ dbo ถูกสร้างขึ้นโดยการเข้าสู่ระบบที่แตกต่างกัน) และคุณสามารถแก้ไขได้โดยเปลี่ยนความเป็นเจ้าของเป็นการเข้าสู่ระบบที่มีอยู่