Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Cara Memperbaiki "Nama objek tidak valid 'OPENJSON'." di SQL Server

Jika Anda menemukan kesalahan Msg 208, Level 16 "Nama objek tidak valid 'OPENJSON'.", Anda mungkin mencoba menggunakan OPENJSON() berfungsi pada database dengan tingkat kompatibilitas kurang dari 130.

OPENJSON() hanya tersedia di bawah tingkat kompatibilitas 130 atau lebih tinggi.

Untuk memperbaikinya, tingkatkan tingkat kompatibilitas database Anda menjadi 130 atau lebih tinggi, atau ubah ke database yang sudah memiliki tingkat kompatibilitas yang sesuai.

Contoh Kesalahan

Berikut adalah contoh beberapa kode dasar yang akan menyebabkan kesalahan ini.

USE Pets;
SELECT * FROM OPENJSON('["Cat","Dog","Bird"]'); 

Hasil:

Pesan 208, Level 16, Status 1, Baris 1Nama objek tidak valid 'OPENJSON'.

Saat tingkat kompatibilitas database Anda lebih rendah dari 130, SQL Server tidak dapat menemukan dan menjalankan OPENJSON() fungsi.

Dalam kasus saya, database tempat saya mencoba menjalankan ini memiliki tingkat kompatibilitas 120.

Periksa Tingkat Kompatibilitas Basis Data

Anda dapat menanyakan sys.databases untuk memeriksa tingkat kompatibilitas database (atau semua database jika Anda mau).

SELECT compatibility_level
FROM sys.databases
WHERE name = 'Pets'; 

Hasil:

+-------------+| compatibility_level   ||-----------------------|| 120                   |+-----------------------+

Seperti yang diduga, database ini memiliki tingkat kompatibilitas kurang dari 130.

Solusi 1

Solusi yang paling jelas adalah meningkatkan tingkat kompatibilitas database yang Anda coba jalankan OPENJSON() melawan.

ALTER DATABASE Pets  
SET COMPATIBILITY_LEVEL = 150; 

Menjalankan kode tersebut akan meningkatkan tingkat kompatibilitas database menjadi 150, yang lebih dari cukup tinggi untuk mendukung OPENJSON() fungsi.

Jika kita periksa lagi tingkat kompatibilitasnya, kita dapat melihat bahwa itu meningkat menjadi 150.

SELECT compatibility_level
FROM sys.databases
WHERE name = 'Pets'; 

Hasil:

+-------------+| compatibility_level   ||-----------------------|| 150                   |+-----------------------+

Sekarang kita dapat menjalankan kode asli tanpa kesalahan.

USE Pets;
SELECT * FROM OPENJSON('["Cat","Dog","Bird"]'); 

Hasil:

+-------+---------+--------+| kunci   | nilai   | ketik   ||-------+---------+--------|| 0     | Kucing     | 1      || 1     | Anjing     | 1      || 2     | Burung    | 1      |+-------+---------+--------+

Solusi 2

Jika karena alasan tertentu Anda tidak dapat, atau tidak ingin, mengubah tingkat kompatibilitas database, Anda dapat beralih ke database yang sudah memiliki tingkat kompatibilitas yang sesuai.

Jelas, ini mungkin cocok atau tidak, tergantung pada apakah Anda perlu memasukkan JSON yang telah diurai ke dalam database atau tidak.

Bagaimanapun, untuk melakukan ini, Anda dapat meminta sys.databases untuk database yang sesuai.

SELECT 
    name,
    compatibility_level
FROM sys.databases; 

Hasil:

+--------------------+-----------------------+| nama               | compatibility_level   ||--------------------+-----------------------|| master             | 150                   || tempdb             | 150                   || model              | 150                   || msdb               | 150                   || Musik              | 150                   || Uji               | 150                   || WideWorldImporters | 130                   || Dunia              | 140                   || Hewan peliharaan               | 120                   |+--------------------+-----------------------+ 

Untungnya dalam kasus ini, semua database lain 130 atau lebih tinggi. Jadi kita bisa beralih ke salah satu dari mereka.

USE World;
SELECT * FROM OPENJSON('["Cat","Dog","Bird"]'); 

Hasil:

+-------+---------+--------+| kunci   | nilai   | ketik   ||-------+---------+--------|| 0     | Kucing     | 1      || 1     | Anjing     | 1      || 2     | Burung    | 1      |+-------+---------+--------+


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ganti nama kolom SQL Server 2008

  2. Menggunakan Pencarian Teks Lengkap di SQL Server 2008 di beberapa tabel, kolom

  3. Kode Kerangka Entitas Pertama dengan Sinonim SQL Server

  4. 2 Cara Mendaftar Semua Fungsi Bernilai Tabel di Database SQL Server

  5. Bagaimana cara mengatur pemeriksaan untuk koneksi di SQL Server?