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

OPENJSON "Sintaks salah di dekat kata kunci 'dengan'." di SQL Server (ASK)

Jika Anda mencoba menjalankan beberapa OPENJSON() kode di SQL Server, tetapi Anda mendapatkan kesalahan Msg 319, Level 15 "Sintaks salah di dekat kata kunci 'dengan'", satu kemungkinan adalah Anda benar-benar memiliki kesalahan sintaks.

Tetapi jika Anda telah memeriksa dan memeriksa ulang, dan Anda yakin tidak ada kesalahan sintaks, bisa jadi kesalahan tersebut adalah efek samping dari tingkat kompatibilitas database yang salah.

Biasanya Anda akan mendapatkan pesan kesalahan 208, Level 16 "Nama objek tidak valid 'OPENJSON'." ketika menggunakan tingkat kompatibilitas database lebih rendah dari 130, tetapi dalam beberapa kasus, SQL Server menemukan masalah dengan WITH klausa pertama.

Saya mengalami kesalahan ini saat menjalankan OPENJSON() yang valid kode, tetapi pada database di mana tingkat kompatibilitasnya hanya 120.

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

Ketika saya memeriksa tingkat kompatibilitas database saya, saya melihat bahwa itu adalah 120. Saya segera meningkatkannya menjadi 150 dan saya tidak lagi mendapatkan kesalahan.

Contoh Kesalahan

Berikut adalah contoh kode yang menghasilkan kesalahan ini ketika tingkat kompatibilitas database lebih rendah dari 130.

DECLARE @json NVARCHAR(4000) = N'{ 
    "pets" : {
            "cats" : [
            { "id" : 1, "name" : "Fluffy", "sex" : "Female" },
            { "id" : 2, "name" : "Long Tail", "sex" : "Female" },
            { "id" : 3, "name" : "Scratch", "sex" : "Male" }
        ],
            "dogs" : [
            { "id" : 1, "name" : "Fetch", "sex" : "Male" },
            { "id" : 2, "name" : "Fluffy", "sex" : "Male" },
            { "id" : 3, "name" : "Wag", "sex" : "Female" }
        ]
    }
}'

SELECT *
FROM OPENJSON(@json, '$.pets.dogs')
WITH  (
        [id]    int,  
        [name]  varchar(60), 
        [sex]   varchar(6)
    );

Hasil:

Msg 319, Level 15, State 2, Line 17
Incorrect syntax near the keyword 'with'. If this statement is a common table expression, an xmlnamespaces clause or a change tracking context clause, the previous statement must be terminated with a semicolon.

Perbaiki Kesalahan

Anda dapat dengan mudah memperbaiki kesalahan ini dengan mengubah tingkat kompatibilitas database ke 130 atau lebih tinggi.

-- Change compatibility level
ALTER DATABASE Pets  
SET COMPATIBILITY_LEVEL = 150;

-- Check compatibility level
SELECT compatibility_level
FROM sys.databases
WHERE name = 'Pets';

Hasil:

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

Atau, jika Anda tidak ingin mengubahnya, Anda dapat beralih ke database yang Anda tahu memiliki tingkat kompatibilitas yang sesuai.

Semoga postingan ini membantu seseorang di luar sana yang mengalami kesalahan yang sama.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Grup Percakapan Broker Layanan Server Sql

  2. Buat tampilan dengan klausa ORDER BY

  3. Pencadangan SQL Server 2017 -1

  4. Kueri SQL mana yang lebih cepat? Filter pada kriteria Gabung atau klausa Di mana?

  5. simpan bahasa arab di database SQL