Nếu bạn gặp lỗi Msg 208, Cấp 16 “Tên đối tượng không hợp lệ‘ OPENJSON ’.”, Có thể bạn đang cố sử dụng OPENJSON()
hoạt động trên cơ sở dữ liệu có mức độ tương thích nhỏ hơn 130.
OPENJSON()
chỉ khả dụng ở mức độ tương thích 130 hoặc cao hơn.
Để khắc phục điều này, hãy tăng mức tương thích của cơ sở dữ liệu của bạn lên 130 hoặc cao hơn hoặc thay đổi sang cơ sở dữ liệu đã có mức tương thích thích hợp.
Ví dụ về Lỗi
Dưới đây là ví dụ về một số mã cơ bản sẽ gây ra lỗi này.
USE Pets;
SELECT * FROM OPENJSON('["Cat","Dog","Bird"]');
Kết quả:
Msg 208, Level 16, State 1, Line 1Tên đối tượng không hợp lệ 'OPENJSON'.
Khi mức độ tương thích cơ sở dữ liệu của bạn thấp hơn 130, Máy chủ SQL không thể tìm và chạy OPENJSON()
chức năng.
Trong trường hợp của tôi, cơ sở dữ liệu tôi đang cố gắng chạy điều này có mức độ tương thích là 120.
Kiểm tra mức độ tương thích của cơ sở dữ liệu
Bạn có thể truy vấn sys.databases
để kiểm tra mức độ tương thích của cơ sở dữ liệu (hoặc tất cả các cơ sở dữ liệu nếu bạn muốn).
SELECT compatibility_level
FROM sys.databases
WHERE name = 'Pets';
Kết quả:
+ ----------------------- + | độ tương thích || ----------------------- || 120 | + ----------------------- +
Như nghi ngờ, cơ sở dữ liệu này có mức độ tương thích nhỏ hơn 130.
Giải pháp 1
Giải pháp rõ ràng nhất là tăng mức độ tương thích của cơ sở dữ liệu mà bạn đang cố gắng chạy OPENJSON()
chống lại.
ALTER DATABASE Pets
SET COMPATIBILITY_LEVEL = 150;
Chạy mã đó sẽ tăng mức độ tương thích của cơ sở dữ liệu lên 150, mức này quá cao để hỗ trợ OPENJSON()
chức năng.
Nếu chúng tôi kiểm tra lại mức độ tương thích, chúng tôi có thể thấy rằng mức đó đã tăng lên 150.
SELECT compatibility_level
FROM sys.databases
WHERE name = 'Pets';
Kết quả:
+ ----------------------- + | độ tương thích || ----------------------- || 150 | + ----------------------- +
Bây giờ chúng tôi có thể chạy mã gốc mà không bị lỗi.
USE Pets;
SELECT * FROM OPENJSON('["Cat","Dog","Bird"]');
Kết quả:
+ ------- + --------- + -------- + | chìa khóa | giá trị | gõ || ------- + --------- + -------- || 0 | Con mèo | 1 || 1 | Con chó | 1 || 2 | Chim | 1 | + ------- + --------- + -------- +
Giải pháp 2
Nếu vì lý do nào đó mà bạn không thể hoặc không muốn thay đổi mức độ tương thích của cơ sở dữ liệu, bạn có thể chuyển sang cơ sở dữ liệu đã có mức độ tương thích thích hợp.
Rõ ràng, điều này có thể phù hợp hoặc có thể không phù hợp, tùy thuộc vào việc bạn có cần chèn JSON đã phân tích cú pháp của mình vào cơ sở dữ liệu hay không.
Dù sao, để làm điều này, bạn có thể truy vấn sys.databases
để có cơ sở dữ liệu phù hợp.
SELECT
name,
compatibility_level
FROM sys.databases;
Kết quả:
+ -------------------- + ----------------------- + | tên | độ tương thích || -------------------- + ----------------------- || chính chủ | 150 || tempdb | 150 || mô hình | 150 || msdb | 150 || Âm nhạc | 150 || Kiểm tra | 150 || WideWorldImporters | 130 || Thế giới | 140 || Thú cưng | 120 | + -------------------- + ----------------------- +May mắn thay trong trường hợp này, tất cả các cơ sở dữ liệu khác đều là 130 hoặc cao hơn. Vì vậy, chúng tôi có thể chuyển sang bất kỳ một trong số chúng.
USE World; SELECT * FROM OPENJSON('["Cat","Dog","Bird"]');
Kết quả:
+ ------- + --------- + -------- + | chìa khóa | giá trị | gõ || ------- + --------- + -------- || 0 | Con mèo | 1 || 1 | Con chó | 1 || 2 | Chim | 1 | + ------- + --------- + -------- +