2013-03-11 16 views
6

के लिए अमान्य है, मुझे शून्य के उपयोग के बारे में कोई प्रश्न होगा।ऑपरेंड डेटा प्रकार शून्य प्रकार योग ऑपरेटर

अगर मैं इस क्वेरी चलाने

SELECT SUM(x) 
FROM (SELECT NULL AS x) AS DerivedTable 

मैं त्रुटि संदेश

मिल "ओपेरैंड डेटा प्रकार शून्य प्रकार योग ऑपरेटर के लिए अमान्य है।"

हालांकि, अगर मैं एक शून्य क्षेत्र के साथ एक टेबल बनाता हूं और इसे कुल योग के भीतर उपयोग करता हूं, तो यह कुल मान को अनदेखा कर देगा और मूल रूप से सभी शेष रिकॉर्ड जोड़ देगा।

CREATE TABLE #temp1(x int) 
insert into #temp values (NULL),(3),(5) 

SELECT SUM(x) FROM #temp1 

परिणाम 8.

वहाँ इस एक के एक तार्किक व्याख्या है है? क्या यह डेटा प्रकार के एनयूएलएल के कारण व्युत्पन्न तालिका के साथ क्वेरी पर घोषित नहीं किया गया था, लेकिन अस्थायी तालिका के साथ घोषित किया गया था? इसके अलावा, मैं वास्तव में जानना चाहूंगा कि तालिका या व्युत्पन्न तालिका से चलने पर इस त्रुटि संदेश को उत्पन्न करने का कोई तरीका है, जैसे कि दूसरा # temp1 उदाहरण। कोई भी उदाहरण जो किसी तालिका या तालिका अभिव्यक्ति से चलाते समय इस त्रुटि संदेश का निर्माण करता है, उसका अत्यधिक स्वागत है।

आप सभी

उत्तर

11

यह वास्तव में है, क्योंकि स्तंभ के प्रकार अपने व्युत्पन्न तालिका परिदृश्य में नहीं लगाया जा सकता धन्यवाद।

यदि आप कथन बदलते हैं और कॉलम पर एक प्रकार का स्पष्ट रूप से उपयोग करते हैं, तो चयन काम करेगा।

SELECT SUM(x) FROM (SELECT CAST(NULL AS INTEGER) AS x) AS DerivedTable 

के रूप में निम्नलिखित बयान जहां प्रकार

SELECT SUM(x) FROM (SELECT NULL AS x UNION SELECT 1) AS DerivedTable 

SQL Fiddle


यह निष्कर्ष निकाला जा सकता होगा भी अपने दूसरे सवाल का जवाब होगा। चूंकि आप प्रकारों को घोषित किए बिना कोई टेबल नहीं बना सकते हैं, ऐसे बयान को उत्पन्न करने का कोई तरीका नहीं है जो उस विशिष्ट त्रुटि संदेश उत्पन्न करेगा।

+0

धन्यवाद लियवेन, क्या आप किसी भी स्थिति के बारे में सोचते हैं जब यह त्रुटि संदेश किसी तालिका या तालिका अभिव्यक्ति के माध्यम से उत्पन्न होता है जैसे कि आपके दूसरे उदाहरण की तरह, लेकिन असफल होने के साथ। – user2155565

संबंधित मुद्दे