MSDN के अनुसार, वास्तविक मूल्यों की सीमा - 3.40E + 38 से -1.18E - 38, 0 और 1.18E - 38 से 3.40E + 38 है। हालांकि, मेरे पास काफी मेरी तालिका में उस सीमा से परे कुछ मूल्य।दस्तावेज श्रेणी के बाहर वास्तविक कॉलम होल्डिंग मान
निम्न क्वेरी और बहुत छोटे मान के बहुत सारे कोई बहुत बड़ी वाले रिटर्न:
SELECT MyColumn ,
*
FROM data.MyTable
WHERE MyColumn <> 0
AND (MyColumn < CONVERT(REAL, 1.18E-38)
OR MyColumn > CONVERT(REAL, 3.40E+38)
)
AND (MyColumn < CONVERT(REAL, -3.40E+38)
OR MyColumn > CONVERT(REAL, -1.18E-38)
)
यह दिखाने के लिए कि कैसे इन मूल्यों को तालिका में अंत में आसान है। मैं उन्हें सीधे सम्मिलित कर सकते हैं नहीं:
CREATE TABLE a(r REAL NULL);
GO
INSERT INTO a(r) VALUES(4.330473E-39);
GO
SELECT r FROM a
GO
DROP TABLE a;
----
0.0
लेकिन मैं दो कॉलम विभाजित और हो और सीमा मूल्य के बाहर कर सकते हैं:
CREATE TABLE a
(
r1 REAL NULL ,
r2 REAL NULL ,
r3 REAL NULL
) ;
GO
INSERT INTO a
(r1, r2)
VALUES (4.330473E-38, 1000) ;
GO
UPDATE a
SET r3 = r1/r2 ;
SELECT r1 ,
r2 ,
r3
FROM a
r1 r2 r3
------------- ------------- -------------
4.330473E-38 1000 4.330433E-41
तो मैं MSDN मान्य डेटा के गलत पर्वतमाला देता है लगता है, सही है? क्या मुझे कुछ याद आ रही है?
कई लोगों ने सुझाव दिया कि यह एक बग है।
इस व्यवहार का कौन सा हिस्सा बिल्कुल एक बग है। यह है:
- एमएसडीएन में प्रयुक्त गलत स्थिरांक और डीबीसीसी में उपयोग किया जाता है, साथ ही गोल करने के लिए गलत सीमा भी होती है।
- अद्यतन गलत मूल्यों
एक बग की तरह लगता है, आप अपने पसंदीदा जगह में यह दायर किया है? मुझे लगता है कि आप अपनी खुद की बाधा को 'चेक (आर 3> 3.40 ई -38)' :-) –
@AaronBertrand में जोड़ सकते हैं, मैं निश्चित रूप से एक बाधा डाल सकता हूं, लेकिन मैं समझना चाहता हूं कि क्यों SQL सर्वर दस्तावेज़ के रूप में व्यवहार नहीं करता है। –
'dbcc checktable ('a') DATA_PURITY' के साथ: कॉलम" r3 "मान डेटा प्रकार" वास्तविक "के लिए सीमा से बाहर है। कॉलम को कानूनी मान पर अपडेट करें। इसकी रिपोर्ट करें ... –