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 |+-------+---------+--------+