Bagikan melalui


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:

    1. DARI

    2. AKTIF

    3. IKUTI

    4. WHERE

    5. GROUP BY

    6. DENGAN CUBE atau WITH ROLLUP

    7. HAVING

    8. SELECT

    9. DISTINCT

    10. ORDER BY

    11. 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 jika Col1 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)