Saya menduga Anda memiliki dua tabel dengan nama yang sama. Satu dimiliki oleh skema 'dbo' ( dbo.PerfDiag), dan yang lainnya dimiliki oleh skema default akun yang digunakan untuk menyambung ke SQL Server (seperti userid.PerfDiag).
Jika Anda memiliki referensi yang tidak memenuhi syarat ke objek skema (seperti tabel) - referensi yang tidak memenuhi syarat menurut nama skema - referensi objek harus diselesaikan. Resolusi nama terjadi dengan mencari dalam urutan berikut untuk objek dari tipe yang sesuai (tabel) dengan nama yang ditentukan. Nama tersebut memutuskan untuk pertandingan pertama:
- Di bawah skema default pengguna.
- Di bawah skema 'dbo'.
Referensi yang tidak memenuhi syarat terikat pada kecocokan pertama dalam urutan di atas.
Sebagai praktik umum yang direkomendasikan, salah satu referensi harus selalu memenuhi syarat untuk objek skema, untuk alasan kinerja:
Referensi yang tidak memenuhi syarat dapat membatalkan rencana eksekusi yang di-cache untuk prosedur atau kueri yang disimpan, karena skema yang mengikat referensi dapat berubah tergantung pada kredensial yang menjalankan prosedur atau kueri yang tersimpan. Hal ini menghasilkan kompilasi ulang kueri / prosedur tersimpan, kinerja yang terpukul. Kompilasi ulang menyebabkan kunci kompilasi dihapus, memblokir orang lain untuk mengakses sumber daya yang dibutuhkan.
Resolusi nama memperlambat eksekusi kueri karena dua probe harus dibuat untuk menyelesaikan kemungkinan versi objek (yang dimiliki oleh 'dbo'). Ini kasus biasa. Satu-satunya saat probe tunggal akan menyelesaikan nama adalah jika pengguna saat ini memiliki objek dengan nama dan jenis yang ditentukan.
[Diedit untuk catatan lebih lanjut]
Kemungkinan lainnya adalah (tanpa urutan tertentu):
- Anda tidak tersambung ke database yang Anda kira.
- Anda tidak terhubung ke contoh SQL Server yang Anda kira.
Periksa kembali string koneksi Anda dan pastikan bahwa string tersebut secara eksplisit menentukan nama instance SQL Server dan nama database.