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

कैसे ठीक करें "प्रक्रिया को 'ntext/nchar/nvarchar' प्रकार के पैरामीटर '@statement' की अपेक्षा है।" SQL सर्वर में त्रुटि

sp_executesql जैसी संग्रहीत कार्यविधियों को निष्पादित करते समय त्रुटि संदेश 214, स्तर 16 का सामना करना काफी आसान है या sp_describe_first_result_set

सौभाग्य से इसे ठीक करना भी आसान है!

यह त्रुटि प्राप्त करने का सबसे आम कारण यह है कि आप अपनी स्ट्रिंग को N . के साथ उपसर्ग करना भूल गए हैं ।

इसलिए, इस समस्या को ठीक करने के लिए, अपनी स्ट्रिंग को N . के साथ उपसर्ग करने का प्रयास करें ।

कोड का उदाहरण जो त्रुटि का कारण बनता है

निम्न कोड इस त्रुटि का कारण बनता है।

EXEC sp_executesql 'SELECT * FROM Cats'; 

परिणाम:

Msg 214, Level 16, State 2, Procedure sp_executesql, Line 1
Procedure expects parameter '@statement' of type 'ntext/nchar/nvarchar'.

इस त्रुटि का कारण यह है कि sp_executesql . का पहला तर्क प्रक्रिया या तो यूनिकोड स्थिरांक या यूनिकोड चर होना चाहिए।

इसलिए, जब आप एक स्ट्रिंग के रूप में तर्क प्रदान कर रहे हैं, तो आपको इसे N . के साथ उपसर्ग करना होगा ।

समाधान

यहाँ उपरोक्त समस्या का समाधान है।

EXEC sp_executesql N'SELECT * FROM Cats'; 

परिणाम:

+---------+-------------+
| CatId   | CatName     |
|---------+-------------|
| 1       | Meow        |
| 2       | Fluffy      |
| 3       | Scratch     |
| 4       | Bulldog     |
| 5       | King George |
| 6       | Sharp       |
| 7       | Fritz       |
| 8       | Garfield    |
| 9       | Boss        |
+---------+-------------+

ध्यान दें कि इसका तालिका के कॉलम से कोई लेना-देना नहीं है। उदाहरण के लिए, मेरे Cats . में तालिका, CatId कॉलम int . है और CatsName कॉलम varchar(60) . है ।

चर

यदि आप एक स्ट्रिंग के बजाय एक चर पारित कर रहे हैं, तो आप चर प्रकार बदल सकते हैं। ऐसा करने से आप N . के साथ तर्क को उपसर्ग करने से बचेंगे ।

यहां एक वैरिएबल का उदाहरण दिया गया है जो गड़बड़ी पैदा करता है।

DECLARE @tsql_query varchar(max);
SET @tsql_query = 'SELECT * FROM Cats';
EXEC sp_executesql @tsql_query;

परिणाम:

Msg 214, Level 16, State 2, Procedure sp_executesql, Line 1
Procedure expects parameter '@statement' of type 'ntext/nchar/nvarchar'.

एक बार फिर हमें 214 त्रुटि मिलती है, क्योंकि तर्क यूनिकोड स्थिरांक या यूनिकोड चर नहीं है।

हम वैरिएबल को यूनिकोड वैरिएबल घोषित करके इसे ठीक कर सकते हैं।

DECLARE @tsql_query nvarchar(max);
SET @tsql_query = 'SELECT * FROM Cats';
EXEC sp_executesql @tsql_query;

परिणाम:

+---------+-------------+
| CatId   | CatName     |
|---------+-------------|
| 1       | Meow        |
| 2       | Fluffy      |
| 3       | Scratch     |
| 4       | Bulldog     |
| 5       | King George |
| 6       | Sharp       |
| 7       | Fritz       |
| 8       | Garfield    |
| 9       | Boss        |
+---------+-------------+

एक और उदाहरण

उपरोक्त उदाहरण sp_executesql . का उपयोग करते हैं प्रक्रिया, लेकिन आप यह त्रुटि किसी भी समय प्राप्त कर सकते हैं जब कोई प्रक्रिया यूनिकोड की अपेक्षा कर रही है लेकिन इसे प्राप्त नहीं करती है।

एक अन्य सिस्टम प्रक्रिया जो यूनिकोड तर्क को स्वीकार करती है वह है sp_describe_first_result_set . इसलिए, हम उस प्रक्रिया का उपयोग करके उसी त्रुटि को बाध्य कर सकते हैं।

EXEC sp_describe_first_result_set 
    @tsql = 'SELECT * FROM Cats', 
    @params = null, 
    @browse_information_mode = 1;

परिणाम:

Msg 214, Level 16, State 21, Procedure sp_describe_first_result_set, Line 1
Procedure expects parameter '@tsql' of type 'nvarchar(max)'.

हालांकि सटीक शब्दांकन थोड़ा अलग है, यह वही त्रुटि है (संदेश 214, स्तर 16), और एक ही सुधार है।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एक स्थिति के अपवाद के साथ, तालिका में अद्यतनों को कैसे रोकें?

  2. SQL सर्वर में लॉजिकल और ऑपरेटर क्या है - SQL सर्वर / TSQL ट्यूटोरियल पार्ट 120

  3. EF4 में NOLOCK संकेत का उपयोग करना?

  4. JDBC MSSQL से रिटर्न वैल्यू प्राप्त करना

  5. आप SQL सर्वर में हाँ/नहीं बूलियन फ़ील्ड कैसे बनाते हैं?