Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak naprawić „Nieprawidłowa nazwa obiektu „OPENJSON”. w SQL Server

Jeśli napotkasz błąd Msg 208, poziom 16 „Nieprawidłowa nazwa obiektu ‚OPENJSON’.”, prawdopodobnie próbujesz użyć OPENJSON() działać w bazie danych o poziomie zgodności mniejszym niż 130.

OPENJSON() jest dostępny tylko na poziomie zgodności 130 lub wyższym.

Aby to naprawić, zwiększ poziom zgodności swojej bazy danych do 130 lub wyższego lub zmień bazę danych, która ma już odpowiedni poziom zgodności.

Przykład błędu

Oto przykład podstawowego kodu, który spowoduje ten błąd.

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

Wynik:

Msg 208, Level 16, State 1, Line 1
Invalid object name 'OPENJSON'.

Gdy poziom zgodności Twojej bazy danych jest niższy niż 130, SQL Server nie może znaleźć i uruchomić OPENJSON() funkcja.

W moim przypadku baza danych, na której próbowałem to uruchomić, miała poziom zgodności 120.

Sprawdź poziom zgodności bazy danych

Możesz zapytać sys.databases aby sprawdzić poziom zgodności bazy danych (lub wszystkich baz danych, jeśli wolisz).

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

Wynik:

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

Zgodnie z podejrzeniami ta baza danych ma poziom zgodności poniżej 130.

Rozwiązanie 1

Najbardziej oczywistym rozwiązaniem jest zwiększenie poziomu zgodności bazy danych, dla której próbujesz uruchomić OPENJSON() przeciw.

ALTER DATABASE Pets  
SET COMPATIBILITY_LEVEL = 150;

Uruchomienie tego kodu zwiększy poziom zgodności bazy danych do 150, co jest więcej niż wystarczające do obsługi OPENJSON() funkcja.

Jeśli ponownie sprawdzimy poziom zgodności, zobaczymy, że wzrósł do 150.

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

Wynik:

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

Teraz możemy uruchomić oryginalny kod bez błędów.

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

Wynik:

+-------+---------+--------+
| key   | value   | type   |
|-------+---------+--------|
| 0     | Cat     | 1      |
| 1     | Dog     | 1      |
| 2     | Bird    | 1      |
+-------+---------+--------+

Rozwiązanie 2

Jeśli z jakiegoś powodu nie możesz lub nie chcesz zmienić poziomu zgodności bazy danych, możesz przełączyć się na bazę danych, która ma już odpowiedni poziom zgodności.

Oczywiście może to być odpowiednie lub nie, w zależności od tego, czy musisz wstawić przeanalizowany JSON do bazy danych, czy nie.

W każdym razie, aby to zrobić, możesz zapytać sys.databases dla odpowiedniej bazy danych.

SELECT 
    name,
    compatibility_level
FROM sys.databases;

Wynik:

+--------------------+-----------------------+
| name               | compatibility_level   |
|--------------------+-----------------------|
| master             | 150                   |
| tempdb             | 150                   |
| model              | 150                   |
| msdb               | 150                   |
| Music              | 150                   |
| Test               | 150                   |
| WideWorldImporters | 130                   |
| World              | 140                   |
| Pets               | 120                   |
+--------------------+-----------------------+

Na szczęście w tym przypadku wszystkie inne bazy danych mają 130 lub więcej. Abyśmy mogli przełączyć się na dowolny z nich.

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

Wynik:

+-------+---------+--------+
| key   | value   | type   |
|-------+---------+--------|
| 0     | Cat     | 1      |
| 1     | Dog     | 1      |
| 2     | Bird    | 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. Jak dokumentować bazę danych SQL Server

  2. Rozwiązywanie problemów z zawsze włączonymi grupami dostępności programu SQL Server

  3. Co to jest domyślne ograniczenie w programie SQL Server — samouczek dotyczący programu SQL Server / TSQL — część 90

  4. Wdróż zawsze włączone grupy dostępności programu SQL Server w systemie Linux

  5. Co jest szybsze COALESCE CZY ISNULL?