अगर आप कुछ OPENJSON()
चलाने की कोशिश कर रहे हैं SQL सर्वर में कोड, लेकिन आपको त्रुटि संदेश 319, स्तर 15 "कीवर्ड 'के साथ' के पास गलत वाक्यविन्यास मिल रहा है, एक संभावना यह है कि आपके पास वास्तव में एक वाक्यविन्यास त्रुटि है।
लेकिन अगर आपने चेक किया है और डबल चेक किया है, और आप आश्वस्त हैं कि कोई सिंटैक्स त्रुटि नहीं है, तो यह वास्तव में हो सकता है कि त्रुटि गलत डेटाबेस संगतता स्तर होने का एक साइड इफेक्ट है।
आम तौर पर आपको त्रुटि संदेश 208, स्तर 16 "अमान्य ऑब्जेक्ट नाम 'OPENJSON'" मिलेगा। 130 से कम के डेटाबेस संगतता स्तर का उपयोग करते समय, लेकिन कुछ मामलों में, SQL सर्वर WITH
के साथ एक समस्या पाता है पहले खंड।
वैध OPENJSON()
running चलाते समय मुझे इस त्रुटि का सामना करना पड़ा कोड, लेकिन एक डेटाबेस पर जहां संगतता स्तर केवल 120 था।
OPENJSON()
केवल 130 या अधिक के संगतता स्तर वाले डेटाबेस पर उपलब्ध है।
जब मैंने अपने डेटाबेस संगतता स्तर की जाँच की, तो मैंने देखा कि यह 120 था। मैंने इसे तुरंत बढ़ाकर 150 कर दिया और मुझे अब त्रुटि नहीं मिली।
त्रुटि का उदाहरण
यहां कोड का एक उदाहरण दिया गया है जो डेटाबेस संगतता स्तर 130 से कम होने पर यह त्रुटि उत्पन्न करता है।
DECLARE @json NVARCHAR(4000) = N'{
"pets" : {
"cats" : [
{ "id" : 1, "name" : "Fluffy", "sex" : "Female" },
{ "id" : 2, "name" : "Long Tail", "sex" : "Female" },
{ "id" : 3, "name" : "Scratch", "sex" : "Male" }
],
"dogs" : [
{ "id" : 1, "name" : "Fetch", "sex" : "Male" },
{ "id" : 2, "name" : "Fluffy", "sex" : "Male" },
{ "id" : 3, "name" : "Wag", "sex" : "Female" }
]
}
}'
SELECT *
FROM OPENJSON(@json, '$.pets.dogs')
WITH (
[id] int,
[name] varchar(60),
[sex] varchar(6)
);
परिणाम:
Msg 319, Level 15, State 2, Line 17 Incorrect syntax near the keyword 'with'. If this statement is a common table expression, an xmlnamespaces clause or a change tracking context clause, the previous statement must be terminated with a semicolon.
त्रुटि ठीक करें
आप डेटाबेस के संगतता स्तर को 130 या उच्चतर में बदलकर इस त्रुटि को आसानी से ठीक कर सकते हैं।
-- Change compatibility level
ALTER DATABASE Pets
SET COMPATIBILITY_LEVEL = 150;
-- Check compatibility level
SELECT compatibility_level
FROM sys.databases
WHERE name = 'Pets';
परिणाम:
+-----------------------+ | compatibility_level | |-----------------------| | 150 | +-----------------------+
वैकल्पिक रूप से, यदि आप इसे बदलना नहीं चाहते हैं, तो आप उस डेटाबेस पर स्विच कर सकते हैं जिसे आप जानते हैं कि एक उपयुक्त संगतता स्तर है।
उम्मीद है कि यह पोस्ट किसी ऐसे व्यक्ति की मदद करती है जो उसी त्रुटि का सामना करता है।