Saya sedikit menemui jalan buntu. Saya memiliki kueri yang dihasilkan oleh beberapa C#
kode. Kueri berfungsi dengan baik diMicrosoft SQL Server Management Studio
saat dijalankan pada database yang sama.
Namun ketika kode saya mencoba untuk menjalankan kueri yang sama, saya mendapatkan kesalahan yang sama tentang kolom yang tidak valid dan pengecualian dilemparkan. Semua kueri yang mereferensikan kolom ini gagal.
Kolom yang dimaksud baru-baru ini ditambahkan ke database. Ini adalah kolom tanggal yang disebutIncident_Begin_Time_ts
.
Contoh yang gagal adalah:
select * from PerfDiag
where Incident_Begin_Time_ts > '2010-01-01 00:00:00';
Pertanyaan lain seperti Select MAX(Incident_Being_Time_ts);
juga gagal saat dijalankan dalam kode karena dianggap kolom hilang.
Ada ide?
sql
sql-server
kidl33t
sumber
sumber
Jawaban:
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 (sepertiuserid.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:
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):
Periksa kembali string koneksi Anda dan pastikan bahwa string tersebut secara eksplisit menentukan nama instance SQL Server dan nama database.
sumber
Cukup tekan Ctrl+ Shift+ Rdan lihat ...
Di SQL Server Management Studio, Ctrl + Shift + R menyegarkan cache lokal.
sumber
Jika Anda menjalankan ini di dalam transaksi dan pernyataan SQL sebelum ini menjatuhkan / mengubah tabel, Anda juga bisa mendapatkan pesan ini.
sumber
Saya akhirnya mematikan dan memulai ulang Microsoft SQL Server Management Studio; dan itu memperbaikinya untuk saya. Namun di lain waktu, memulai jendela kueri baru saja sudah cukup.
sumber
Jika Anda menggunakan variabel dengan nama yang sama dengan kolom Anda, bisa jadi Anda lupa penanda variabel '@'. Dalam pernyataan INSERT itu akan dideteksi sebagai kolom.
sumber
Baru saja mengalami masalah yang sama persis. Saya mengganti nama beberapa kolom alias di tabel sementara yang selanjutnya digunakan oleh bagian lain dari kode yang sama. Untuk beberapa alasan, ini tidak direkam oleh SQL Server Management Studio dan mengeluh tentang nama kolom yang tidak valid.
Apa yang saya lakukan hanyalah membuat kueri baru, menyalin dan menempelkan kode SQL dari kueri lama ke kueri baru ini dan menjalankannya lagi. Ini sepertinya menyegarkan lingkungan dengan benar.
sumber
Dalam kasus saya, saya memulai ulang Microsoft SQL Sever Management Studio dan ini berfungsi dengan baik untuk saya.
sumber
Dalam kasus saya, saya mencoba mendapatkan nilai dari ResultSet yang salah saat menanyakan beberapa pernyataan SQL.
sumber
Dalam kasus saya, tampaknya masalahnya adalah masalah cache yang aneh. Solusi di atas tidak berhasil.
Jika kode Anda berfungsi dengan baik dan Anda menambahkan kolom ke salah satu tabel Anda dan itu memberikan kesalahan 'nama kolom tidak valid', dan solusi di atas tidak berfungsi, coba ini: Pertama-tama jalankan hanya bagian kode untuk membuat yang dimodifikasi tabel dan kemudian jalankan seluruh kode.
sumber
Termasuk jawaban ini karena ini adalah hasil teratas untuk "nama kolom tidak valid sql" di google dan saya tidak melihat jawaban ini di sini. Dalam kasus saya, saya mendapatkan Nama Kolom Tidak Valid, Id1 karena saya telah menggunakan id yang salah dalam pernyataan .HasForeignKey saya dalam kode Entity Framework C # saya. Setelah saya mengubahnya agar cocok dengan id objek .HasOne (), kesalahan itu hilang.
sumber
Saya mendapatkan kesalahan ini saat menjalankan fungsi skalar menggunakan nilai tabel, tetapi pernyataan Select di klausa RETURN fungsi skalar saya kehilangan bagian "DARI tabel". : facepalms:
sumber
Juga terjadi ketika Anda lupa untuk mengubah ConnectionString dan meminta tabel yang tidak tahu tentang perubahan yang Anda buat secara lokal.
sumber