MSSQLSERVER_207
Berlaku untuk:SQL Server
Detail
Atribut | Nilai |
---|---|
Nama Produk | SQL Server |
ID Peristiwa | 207 |
Sumber Kejadian | MSSQLSERVER |
Komponen | SQLEngine |
Nama Simbolis | SQ_BADCOL |
Teks Pesan | Nama kolom '%.*ls' tidak valid. |
Penjelasan
Kesalahan kueri ini dapat disebabkan oleh salah satu masalah berikut.
Nama kolom salah eja atau kolom tidak ada di salah satu tabel yang ditentukan.
Kolatasi database peka huruf besar/kecil dan kasus nama kolom yang ditentukan dalam kueri tidak cocok dengan kasus kolom yang ditentukan dalam tabel. Misalnya, ketika kolom didefinisikan dalam tabel sebagai LastName dan database menggunakan kolase peka huruf besar/kecil, kueri yang merujuk ke kolom sebagai Nama Belakang atau nama belakang akan menyebabkan kesalahan 207 kembali karena nama kolom tidak cocok.
Alias kolom, yang ditentukan dalam klausa SELECT, dirujuk dalam klausa lain seperti klausa WHERE atau GROUP BY. Misalnya, kueri berikut menentukan alias
Year
kolom dalam klausa SELECT dan merujuknya dalam klausa GROUP BY.USE AdventureWorks2022; GO SELECT DATEPART(yyyy,OrderDate) AS Year, SUM(TotalDue) AS Total FROM Sales.SalesOrderHeader GROUP BY Year;
Karena urutan klausa kueri diproses secara logis, contoh mengembalikan kesalahan 207. Urutan pemrosesan adalah sebagai berikut:
DARI
AKTIF
IKUTI
WHERE
GROUP BY
DENGAN CUBE atau WITH ROLLUP
HAVING
SELECT
DISTINCT
ORDER BY
TOP
Karena alias kolom tidak ditentukan sampai klausa SELECT diproses, nama alias tidak diketahui saat klausa GROUP BY diproses.
Pernyataan MERGE menimbulkan kesalahan ini ketika <klausul merge_matched> mereferensikan kolom dalam tabel sumber tetapi tidak ada baris yang dikembalikan oleh tabel sumber dalam klausul WHEN NOT MATCHED BY SOURCE. Kesalahan terjadi karena kolom dalam tabel sumber tidak dapat diakses ketika tidak ada baris yang dikembalikan ke kueri. Misalnya, klausa
WHEN NOT MATCHED BY SOURCE THEN UPDATE SET TargetTable.Col1 = SourceTable.Col1
dapat menyebabkan pernyataan gagal jikaCol1
dalam tabel sumber tidak dapat diakses.
Tindakan Pengguna
Verifikasi informasi berikut dan koreksi pernyataan yang sesuai.
Nama kolom ada dalam tabel dan dieja dengan benar. Contoh berikut mengkueri tampilan katalog sys.columns untuk mengembalikan semua nama kolom untuk tabel tertentu.
SELECT name FROM sys.columns WHERE object_id = OBJECT_ID('schema_name.table_name');
Sensitivitas kasus kolater database. Pernyataan berikut mengembalikan kolatasi database yang ditentukan.
SELECT collation_name FROM sys.databases WHERE name = 'database_name';
Singkatan CS dalam nama kolabasi menunjukkan kolatasi peka huruf besar/kecil. Misalnya, Latin1_General_CS_AS adalah kolacek peka huruf besar/kecil dan sensitif terhadap aksen. Ubah nama kolom agar sesuai dengan huruf besar/kecil nama kolom seperti yang ditentukan dalam tabel.
Alias kolom salah direferensikan. Ubah pernyataan dengan mengulangi ekspresi yang menentukan alias dalam klausa yang sesuai atau dengan menggunakan tabel turunan. Contoh berikut mengulangi ekspresi yang menentukan
Year
alias dalam klausa GROUP BY.USE AdventureWorks2022; GO SELECT DATEPART(yyyy,OrderDate) AS Year ,SUM(TotalDue) AS Total FROM Sales.SalesOrderHeader GROUP BY DATEPART(yyyy,OrderDate);
Contoh berikut menggunakan tabel turunan untuk membuat nama alias tersedia untuk klausa lain dalam kueri. Perhatikan bahwa alias
Year
didefinisikan dalam klausul FROM, yang diproses terlebih dahulu, sehingga membuat alias tersedia untuk digunakan dalam klausa lain dalam kueri.USE AdventureWorks2022; GO SELECT d.Year, SUM(TotalDue) AS Total FROM (SELECT DATEPART(yyyy,OrderDate) AS Year, TotalDue FROM Sales.SalesOrderHeader)AS d GROUP BY Year;
Klausa WHEN NOT MATCHED BY SOURCE dalam pernyataan MERGE mengacu pada nilai yang dapat diakses. Ubah pernyataan MERGE sehingga setidaknya satu baris dikembalikan oleh tabel sumber dalam klausa WHEN NOT MATCHED BY SOURCE. Misalnya, Anda mungkin perlu menambahkan atau merevisi kondisi pencarian yang ditentukan untuk klausa. Atau, Anda dapat mengubah klausul untuk menentukan nilai yang tidak mereferensikan tabel sumber. Contohnya,
WHEN NOT MATCHED BY SOURCE THEN UPDATE SET TargetTable.Col1 = <expression, or other available value>
.
Lihat Juga
MERGE (Transact-SQL)
FROM (Transact-SQL)
SELECT (Transact-SQL)
UPDATE (Transact-SQL)
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk