Tôi nghi ngờ rằng bạn có hai bảng có cùng tên. Một cái thuộc sở hữu của lược đồ 'dbo' ( dbo.PerfDiag
) và cái kia thuộc sở hữu của lược đồ mặc định của tài khoản được sử dụng để kết nối với SQL Server (tương tự như vậy userid.PerfDiag
).
Khi bạn có một tham chiếu không đủ điều kiện đến một đối tượng lược đồ (chẳng hạn như bảng) - một tham chiếu không đủ điều kiện theo tên lược đồ - thì tham chiếu đối tượng phải được giải quyết. Việc phân giải tên xảy ra bằng cách tìm kiếm trong chuỗi sau cho một đối tượng thuộc loại thích hợp (bảng) với tên được chỉ định. Tên giải quyết cho trận đấu đầu tiên:
- Theo lược đồ mặc định của người dùng.
- Dưới lược đồ 'dbo'.
Tham chiếu không đủ điều kiện được liên kết với trận đấu đầu tiên trong chuỗi trên.
Như một phương pháp chung được khuyến nghị, một người phải luôn đủ điều kiện tham chiếu đến các đối tượng lược đồ, vì lý do hiệu suất:
Tham chiếu không đủ điều kiện có thể làm mất hiệu lực kế hoạch thực thi được lưu trong bộ nhớ cache cho thủ tục hoặc truy vấn được lưu trữ, vì lược đồ mà tham chiếu bị ràng buộc có thể thay đổi tùy thuộc vào thông tin xác thực thực thi thủ tục hoặc truy vấn được lưu trữ. Điều này dẫn đến việc biên dịch lại truy vấn / thủ tục được lưu trữ, một cú đánh hiệu suất. Việc biên dịch lại khiến khóa biên dịch bị loại bỏ, chặn người khác truy cập (các) tài nguyên cần thiết.
Việc phân giải tên làm chậm quá trình thực thi truy vấn vì phải thực hiện hai thăm dò để giải quyết phiên bản có thể có của đối tượng (thuộc sở hữu của 'dbo'). Đây là trường hợp thông thường. Lần duy nhất một thăm dò duy nhất sẽ giải quyết tên là nếu người dùng hiện tại sở hữu một đối tượng có tên và loại được chỉ định.
[Đã chỉnh sửa để ghi chú thêm]
Các khả năng khác là (không theo thứ tự cụ thể):
- Bạn không được kết nối với cơ sở dữ liệu mà bạn nghĩ.
- Bạn không được kết nối với phiên bản SQL Server như bạn nghĩ.
Kiểm tra kỹ các chuỗi kết nối của bạn và đảm bảo rằng chúng chỉ định rõ ràng tên phiên bản SQL Server và tên cơ sở dữ liệu.