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

SQL सर्वर त्रुटि 206:संकार्य प्रकार संघर्ष

SQL सर्वर त्रुटि संदेश 206, स्तर 16 तालिका में डेटा सम्मिलित करते समय प्राप्त होने वाली एक सामान्य त्रुटि है।

ऐसा तब होता है जब आप किसी ऐसे कॉलम में डेटा डालने का प्रयास कर रहे होते हैं जो उस डेटा प्रकार से असंगत होता है जिसे आप सम्मिलित करने का प्रयास कर रहे होते हैं।

ऐसा तब हो सकता है जब आप गलती से गलत कॉलम (या गलत टेबल) में डेटा डालने की कोशिश करते हैं। लेकिन यह तब भी हो सकता है जब आप गलत तरीके से मान लें कि SQL सर्वर आपके लिए डेटा को रूपांतरित कर देगा।

इस समस्या को ठीक करने के लिए, सुनिश्चित करें कि आप सही डेटा प्रकार सम्मिलित कर रहे हैं।

समस्या कोड का उदाहरण

यहां कोड का एक उदाहरण दिया गया है जिसके परिणामस्वरूप यह त्रुटि हुई है।

INSERT INTO Orders(OrderId, OrderDate, OrderDesc) 
VALUES ('2020-04-02', 1, 'Dog food');

परिणाम:

Msg 206, Level 16, State 2, Line 1
Operand type clash: int is incompatible with date

इस मामले में, यह बिल्कुल स्पष्ट है कि मैं कहां गलत हो रहा हूं, केवल कॉलम नामों और उन मूल्यों को देखकर जिन्हें मैं सम्मिलित करने का प्रयास कर रहा हूं।

मैं गलत क्रम में मान डालने की कोशिश कर रहा हूँ।

समस्या यह है कि मैं दिनांक कॉलम में एक पूर्णांक सम्मिलित करने का प्रयास कर रहा हूं। विशेष रूप से, मैं मान डालने का प्रयास कर रहा हूँ 1 OrderDate . नामक कॉलम में ।

बेशक, यह कॉलम नाम नहीं है जो समस्या पैदा कर रहा है। यह वह डेटा प्रकार है जिसे मैं इसमें डालने का प्रयास कर रहा हूं।

यहाँ वह कोड है जिसका उपयोग मैंने तालिका बनाने के लिए किया था:

CREATE TABLE Orders (
    OrderId int NOT NULL,
    OrderDate date NOT NULL,
    OrderDesc varchar(255) NOT NULL,
    CONSTRAINT PKOrders PRIMARY KEY CLUSTERED(OrderId, OrderDate)
    );

हम तालिका परिभाषा से देख सकते हैं कि OrderDate कॉलम तारीख . का उपयोग करता है डेटा प्रकार।

भेष में आशीर्वाद?

त्रुटि प्राप्त करना जितना निराशाजनक हो सकता है, कभी-कभी यह आपके साथ हुई सबसे अच्छी बात हो सकती है।

यदि कोड में कोई त्रुटि नहीं होती है, तो हम गलती से डेटाबेस में गलत डेटा डाल सकते हैं। यह हमारे डेटाबेस की डेटा अखंडता को कम कर देगा।

कल्पना कीजिए कि OrderDate कॉलम एक डेटाटाइम . है तारीख . के बजाय :

DROP TABLE IF EXISTS Orders;
CREATE TABLE Orders (
    OrderId int NOT NULL,
    OrderDate datetime NOT NULL,
    OrderDesc varchar(255) NOT NULL,
    CONSTRAINT PKOrders PRIMARY KEY CLUSTERED(OrderId, OrderDate)
    );

अब कल्पना करें कि हम निम्नलिखित डेटा को उस तालिका में सम्मिलित करने का प्रयास करते हैं:

INSERT INTO Orders(OrderId, OrderDate, OrderDesc) 
VALUES (1, 1, 'Dog food');

परिणाम:

(1 row affected)

हुह? कोई त्रुटि नहीं?

बिल्कुल। कोई त्रुटि नहीं। ऐसा इसलिए है क्योंकि डेटाटाइम प्रकार int . के साथ संगत है प्रकार। दूसरे शब्दों में, SQL सर्वर ने हमारा int . लिया मान लिया और उसे डेटाटाइम . में बदल दिया मूल्य।

यहां बताया गया है कि उस इंसर्ट ऑपरेशन के बाद हमारी टेबल कैसी दिखती है।

SELECT * FROM Orders;

परिणाम:

+-----------+-------------------------+-------------+
| OrderId   | OrderDate               | OrderDesc   |
|-----------+-------------------------+-------------|
| 1         | 1900-01-02 00:00:00.000 | Dog food    |
+-----------+-------------------------+-------------+


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. JSON ऑटो उदाहरणों के लिए SQL सर्वर (T-SQL)

  2. SQL सर्वर (T-SQL) में JSON कुंजी का नाम कैसे बदलें

  3. फ़ील्ड मान का निर्धारण कैसे करें जो SQL सर्वर में (दशमलव, फ्लोट, इंट) में परिवर्तित नहीं हो सकता है

  4. गणना (*) बनाम गणना (1) - SQL सर्वर

  5. एमएस एसक्यूएल में पिछले 30 मिनट के रिकॉर्ड कैसे प्राप्त करें?