यदि आप त्रुटि संदेश 208, स्तर 16 "अमान्य वस्तु नाम 'OPENJSON'" का सामना करते हैं, तो आप शायद OPENJSON()
का उपयोग करने का प्रयास कर रहे हैं 130 से कम के संगतता स्तर वाले डेटाबेस पर कार्य करता है।
OPENJSON()
केवल संगतता स्तर 130 या उच्चतर के अंतर्गत उपलब्ध है।
इसे ठीक करने के लिए, या तो अपने डेटाबेस के संगतता स्तर को 130 या उच्चतर तक बढ़ाएँ, या ऐसे डेटाबेस में बदलें जिसमें पहले से ही उपयुक्त संगतता स्तर हो।
त्रुटि का उदाहरण
यहां कुछ बुनियादी कोड का उदाहरण दिया गया है जो इस त्रुटि का कारण बनेंगे।
USE Pets;
SELECT * FROM OPENJSON('["Cat","Dog","Bird"]');
परिणाम:
Msg 208, Level 16, State 1, Line 1 Invalid object name 'OPENJSON'.
जब आपका डेटाबेस संगतता स्तर 130 से कम होता है, तो SQL सर्वर OPENJSON()
को ढूंढ और चला नहीं सकता है। समारोह।
मेरे मामले में, जिस डेटाबेस पर मैं इसे चलाने की कोशिश कर रहा था, उसका संगतता स्तर 120 था।
डेटाबेस के संगतता स्तर की जांच करें
आप sys.databases
query को क्वेरी कर सकते हैं डेटाबेस के संगतता स्तर की जाँच करने के लिए (या यदि आप चाहें तो सभी डेटाबेस)।
SELECT compatibility_level
FROM sys.databases
WHERE name = 'Pets';
परिणाम:
+-----------------------+ | compatibility_level | |-----------------------| | 120 | +-----------------------+
जैसा कि संदेह है, इस डेटाबेस का संगतता स्तर 130 से कम है।
समाधान 1
सबसे स्पष्ट समाधान उस डेटाबेस के संगतता स्तर को बढ़ाना है जिसके लिए आप OPENJSON()
चलाने का प्रयास कर रहे हैं। विरुद्ध.
ALTER DATABASE Pets
SET COMPATIBILITY_LEVEL = 150;
उस कोड को चलाने से डेटाबेस का संगतता स्तर 150 तक बढ़ जाएगा, जो कि OPENJSON()
का समर्थन करने के लिए पर्याप्त से अधिक है समारोह।
अगर हम फिर से संगतता स्तर की जांच करते हैं, तो हम देख सकते हैं कि यह बढ़कर 150 हो गया है।
SELECT compatibility_level
FROM sys.databases
WHERE name = 'Pets';
परिणाम:
+-----------------------+ | compatibility_level | |-----------------------| | 150 | +-----------------------+
अब हम बिना किसी त्रुटि के मूल कोड चला सकते हैं।
USE Pets;
SELECT * FROM OPENJSON('["Cat","Dog","Bird"]');
परिणाम:
+-------+---------+--------+ | key | value | type | |-------+---------+--------| | 0 | Cat | 1 | | 1 | Dog | 1 | | 2 | Bird | 1 | +-------+---------+--------+
समाधान 2
यदि किसी कारण से आप डेटाबेस के संगतता स्तर को नहीं बदल सकते हैं या नहीं बदलना चाहते हैं, तो आप उस डेटाबेस पर स्विच कर सकते हैं जिसमें पहले से ही उपयुक्त संगतता स्तर है।
जाहिर है, यह उपयुक्त हो सकता है या नहीं, इस पर निर्भर करता है कि आपको अपने पार्स किए गए JSON को डेटाबेस में डालने की आवश्यकता है या नहीं।
वैसे भी, ऐसा करने के लिए, आप sys.databases
. को क्वेरी कर सकते हैं उपयुक्त डेटाबेस के लिए।
SELECT
name,
compatibility_level
FROM sys.databases;
परिणाम:
+--------------------+-----------------------+ | name | compatibility_level | |--------------------+-----------------------| | master | 150 | | tempdb | 150 | | model | 150 | | msdb | 150 | | Music | 150 | | Test | 150 | | WideWorldImporters | 130 | | World | 140 | | Pets | 120 | +--------------------+-----------------------+
सौभाग्य से इस मामले में, अन्य सभी डेटाबेस 130 या उच्चतर हैं। इसलिए हम उनमें से किसी एक पर स्विच कर सकते हैं।
USE World;
SELECT * FROM OPENJSON('["Cat","Dog","Bird"]');
परिणाम:
+-------+---------+--------+ | key | value | type | |-------+---------+--------| | 0 | Cat | 1 | | 1 | Dog | 1 | | 2 | Bird | 1 | +-------+---------+--------+