Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

कैसे ठीक करें "अमान्य वस्तु का नाम 'OPENJSON'।" SQL सर्वर में

यदि आप त्रुटि संदेश 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      |
+-------+---------+--------+


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर में मल्टी-स्टेटमेंट टेबल-वैल्यूड फंक्शन्स और इनलाइन टेबल-वैल्यूड फंक्शन्स के बीच अंतर

  2. SQL सर्वर:दो प्रश्नों के साथ UNION का उपयोग कैसे करें जिसमें दोनों का एक खंड है?

  3. एक सहयोगी तालिका का उपयोग करने के बजाय झंडे को बिटमास्क के रूप में स्टोर करना बेहतर कब होता है?

  4. SQL सर्वर एकाधिक पंक्ति प्रविष्टियों पर काम करने के लिए एक ट्रिगर

  5. SQL सर्वर (T-SQL) में सर्वर संयोजन कैसे दिखाएं