Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

So beheben Sie „Ungültiger Objektname ‚OPENJSON‘.“ im SQL-Server

Wenn Sie auf die Fehlermeldung 208, Ebene 16 „Ungültiger Objektname ‚OPENJSON‘.“ stoßen, versuchen Sie wahrscheinlich, OPENJSON() zu verwenden Funktion auf einer Datenbank mit einem Kompatibilitätsgrad von weniger als 130.

OPENJSON() ist nur unter Kompatibilitätsstufe 130 oder höher verfügbar.

Um dies zu beheben, erhöhen Sie entweder den Kompatibilitätsgrad Ihrer Datenbank auf 130 oder höher oder wechseln Sie zu einer Datenbank, die bereits über den entsprechenden Kompatibilitätsgrad verfügt.

Fehlerbeispiel

Hier ist ein Beispiel für einen grundlegenden Code, der diesen Fehler verursacht.

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

Ergebnis:

Msg 208, Level 16, State 1, Line 1Ungültiger Objektname 'OPENJSON'.

Wenn Ihr Datenbank-Kompatibilitätsgrad niedriger als 130 ist, kann SQL Server OPENJSON() nicht finden und ausführen Funktion.

In meinem Fall hatte die Datenbank, auf der ich das ausführen wollte, einen Kompatibilitätsgrad von 120.

Prüfen Sie den Kompatibilitätsgrad der Datenbank

Sie können sys.databases abfragen um den Kompatibilitätsgrad der Datenbank (oder aller Datenbanken, wenn Sie es vorziehen) zu überprüfen.

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

Ergebnis:

+-----------------------+| Kompatibilitätsstufe   ||---------------------|| 120                   |+-----------------------+

Wie vermutet, hat diese Datenbank einen Kompatibilitätsgrad von weniger als 130.

Lösung 1

Die naheliegendste Lösung besteht darin, den Kompatibilitätsgrad der Datenbank zu erhöhen, für die Sie versuchen, OPENJSON() auszuführen gegen.

ALTER DATABASE Pets  
SET COMPATIBILITY_LEVEL = 150; 

Das Ausführen dieses Codes erhöht den Kompatibilitätsgrad der Datenbank auf 150, was mehr als hoch genug ist, um OPENJSON() zu unterstützen Funktion.

Wenn wir den Kompatibilitätsgrad erneut überprüfen, können wir sehen, dass er auf 150 erhöht wurde.

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

Ergebnis:

+-----------------------+| Kompatibilitätsstufe   ||---------------------|| 150                   |+-----------------------+

Jetzt können wir den Originalcode ohne Fehler ausführen.

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

Ergebnis:

+-------+---------+--------+| Taste   | Wert   | geben Sie   ||-------+---------+--------|| ein 0     | Katze     | 1      || 1     | Hund     | 1      || 2     | Vogel    | 1      |+-------+---------+--------+

Lösung 2

Wenn Sie den Kompatibilitätsgrad der Datenbank aus irgendeinem Grund nicht ändern können oder wollen, können Sie zu einer Datenbank wechseln, die bereits den entsprechenden Kompatibilitätsgrad hat.

Offensichtlich kann dies geeignet sein oder nicht, je nachdem, ob Sie Ihr geparstes JSON in die Datenbank einfügen müssen oder nicht.

Wie auch immer, um dies zu tun, könnten Sie sys.databases abfragen nach einer geeigneten Datenbank.

SELECT 
    name,
    compatibility_level
FROM sys.databases; 

Ergebnis:

+--------------------+-------------------------------+| Name               | Kompatibilitätsstufe   ||--------------------+-------------------------------|| Meister             | 150                   || tempdb             | 150                   || Modell              | 150                   || msdb               | 150                   || Musik              | 150                   || Test               | 150                   || WideWorldImporters | 130                   || Welt              | 140                   || Haustiere               | 120                   |+--------------------+-----------------------+ 

Glücklicherweise sind in diesem Fall alle anderen Datenbanken 130 oder höher. Wir könnten also zu jedem von ihnen wechseln.

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

Ergebnis:

+-------+---------+--------+| Taste   | Wert   | geben Sie   ||-------+---------+--------|| ein 0     | Katze     | 1      || 1     | Hund     | 1      || 2     | Vogel    | 1      |+-------+---------+--------+