SCOPE_IDENTITY () पूर्णांक के बजाय दशमलव क्यों लौटाता है?


90

इसलिए मेरे पास प्राथमिक कुंजी के रूप में एक पहचान स्तंभ के साथ एक तालिका है, इसलिए यह एक पूर्णांक है। तो, SCOPE_IDENTITY()हमेशा मेरे C # एप्लिकेशन के इंट के बजाय एक दशमलव मान क्यों लौटाता है? यह वास्तव में कष्टप्रद है क्योंकि दशमलव मानों को संक्षेप में C # में पूर्णांकों में परिवर्तित नहीं किया जाएगा, जिसका अर्थ है कि मुझे अब सामान का एक गुच्छा फिर से लिखना होगा और बहुत सारे सहायक तरीके होंगे क्योंकि मैं SQL सर्वर और पोस्टग्रेज का उपयोग करता हूं, जो पोस्टग्रैजर्स के लिए एक पूर्णांक को वापस करता है। समान कार्य ।।

SCOPE_IDENTITY()सिर्फ एक सादे पूर्णांक क्यों नहीं लौटाता है? क्या वहाँ लोग हैं जो आमतौर पर प्राथमिक कुंजी के लिए दशमलव / गैर-पहचान मूल्यों का उपयोग करते हैं?

जवाबों:


106

एसक्यूएल सर्वर में, IDENTITYसंपत्ति को सौंपा जा सकता tinyint, smallint, int, bigint, decimal(p, 0), या numeric(p, 0)कॉलम। इसलिए SCOPE_IDENTITYफ़ंक्शन को एक डेटा प्रकार वापस करना होगा जो उपरोक्त सभी को शामिल कर सकता है।

जैसा कि पिछले उत्तर में कहा गया है, बस इसे intवापस करने से पहले सर्वर पर डाल दें, फिर ADO.NET अपने प्रकार का पता लगाएगा जैसा कि आप उम्मीद करते हैं।


2
SCOPE_IDENTITYफ़ंक्शन रिटर्न वैल्यू दशमलव (38,0) है
किकेनेट

36

क्या आप इसे अपनी क्वेरी या संग्रहीत किए गए खरीद (SPs alway int से वैसे भी वापस लौटने से पहले नहीं डाल सकते, लेकिन शायद आप आउटपुट पैरामीटर का उपयोग कर रहे हैं)?

पसंद SELECT CAST(SCOPE_IDENTITY() AS INT) AS LAST_IDENTITY

और यह ऐसा क्यों करता है? संभवतः अधिक लचीला होना और बड़ी संख्या को संभालना।


SCOPE_IDENTITYबिल्ट इन फंक्शन है .. इसलिए जब ऐसा ExecuteScalar('insert...; select scope_identity());करना है तो अपेक्षित इंट के बजाय उस फंक्शन से एक दशमलव लौटाएगा।
अर्लज़

@Earlz, इसलिए SQL को ExecuteScalar में बदल दें ('सम्मिलित करें ...; चयन CAST (गुंजाइश_identity) (जैसे int)');
केडे रूक्स

4

स्कोप पहचान वापसी मूल्य दशमलव (38,0) है

इसे कास्ट करें, OUTPUT क्लॉज़ का उपयोग करें, या SELECT SCOPE_IDENTITY()क्लाइंट के बजाय आउटपुट पैरामीटर को असाइन करें


मेरे मामले में स्तंभ में डेटा प्रकार है, intलेकिन SCOPE_IDENTITY()किसी कारण के लिए रिटर्न System.Decimal... OUTPUTक्लॉज एक पूर्णांक देता है जैसा कि अपेक्षित है, इसलिए धन्यवाद!
एरिक बर्क

3

इसका उपयोग करने का प्रयास करें और आपको एक पूर्णांक वापस मिलेगा:

ExecuteScalar('insert...; select CONVERT(int,scope_identity())');
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.