ฉันสงสัยว่าคุณมีสองตารางที่มีชื่อเดียวกัน สคีมาหนึ่งเป็นเจ้าของโดยสคีมา 'dbo' ( dbo.PerfDiag
) และอีกอันเป็นของสคีมาเริ่มต้นของบัญชีที่ใช้เชื่อมต่อกับ SQL Server (บางอย่างเช่นuserid.PerfDiag
)
เมื่อคุณมีการอ้างอิงที่ไม่ถูกต้องไปยังออบเจ็กต์สคีมา (เช่นตาราง) - อันที่ไม่ผ่านการรับรองตามชื่อสคีมา - การอ้างอิงอ็อบเจ็กต์จะต้องได้รับการแก้ไข การแก้ปัญหาชื่อเกิดขึ้นโดยการค้นหาในลำดับต่อไปนี้สำหรับวัตถุประเภทที่เหมาะสม (ตาราง) ที่มีชื่อที่ระบุ ชื่อจะเปลี่ยนเป็นนัดแรก:
- ภายใต้สคีมาเริ่มต้นของผู้ใช้
- ภายใต้ schema 'dbo'
การอ้างอิงที่ไม่มีเงื่อนไขจะถูกผูกไว้กับการแข่งขันครั้งแรกในลำดับข้างต้น
ตามแนวทางปฏิบัติที่แนะนำโดยทั่วไปควรมีคุณสมบัติในการอ้างอิงถึงวัตถุสคีมาเสมอด้วยเหตุผลด้านประสิทธิภาพ:
การอ้างอิงที่ไม่ตรงตามเงื่อนไขอาจทำให้แผนการดำเนินการแคชสำหรับกระบวนงานหรือคิวรีที่เก็บไว้เป็นโมฆะเนื่องจากสคีมาที่การอ้างอิงถูกผูกไว้อาจเปลี่ยนแปลงไปขึ้นอยู่กับข้อมูลประจำตัวที่เรียกใช้กระบวนงานหรือแบบสอบถามที่เก็บไว้ ส่งผลให้มีการคอมไพล์คิวรี / โพรซีเดอร์ที่จัดเก็บใหม่ซึ่งเป็นผลการดำเนินงาน การคอมไพล์ซ้ำทำให้การล็อกการคอมไพล์ถูกนำออกไปปิดกั้นไม่ให้ผู้อื่นเข้าถึงทรัพยากรที่จำเป็น
การแก้ไขชื่อทำให้การดำเนินการค้นหาช้าลงเนื่องจากต้องทำการโพรบสองตัวเพื่อแก้ไขเป็นเวอร์ชันที่เป็นไปได้ของอ็อบเจ็กต์ (ซึ่งเป็นของ 'dbo') นี่เป็นกรณีปกติ ครั้งเดียวที่โพรบเดียวจะแก้ไขชื่อคือถ้าผู้ใช้ปัจจุบันเป็นเจ้าของออบเจ็กต์ของชื่อและประเภทที่ระบุ
[แก้ไขเพื่อทราบเพิ่มเติม]
ความเป็นไปได้อื่น ๆ ได้แก่ (ไม่เรียงตามลำดับ):
- คุณไม่ได้เชื่อมต่อกับฐานข้อมูลที่คุณคิดว่าคุณเป็น
- คุณไม่ได้เชื่อมต่อกับอินสแตนซ์ SQL Server ที่คุณคิดว่าเป็น
ตรวจสอบสตริงการเชื่อมต่อของคุณอีกครั้งและตรวจสอบให้แน่ใจว่าระบุชื่ออินสแตนซ์ SQL Server และชื่อฐานข้อมูลอย่างชัดเจน