SQL सर्वर में, COUNT_BIG()
फ़ंक्शन और COUNT()
अनिवार्य रूप से वही काम करें:समूह में मिली वस्तुओं की संख्या लौटाएं। मूल रूप से, आप इन फ़ंक्शंस का उपयोग यह पता लगाने के लिए कर सकते हैं कि किसी तालिका या परिणाम सेट में कितनी पंक्तियाँ हैं।
कई मामलों में, आप जो भी पसंद करते हैं उसे चुनने में सक्षम होंगे। हालाँकि, इन दो कार्यों के बीच एक अंतर है जो आपको एक दूसरे का उपयोग करने के लिए निर्देशित कर सकता है।
अंतर यह है कि COUNT()
अपना परिणाम int . के रूप में देता है , जबकि COUNT_BIG()
अपना परिणाम बिगिंट . के रूप में लौटाता है .
दूसरे शब्दों में, आपको COUNT_BIG()
. का उपयोग करना होगा यदि आप इसके परिणाम 2,147,483,647 से बड़े होने की उम्मीद करते हैं (अर्थात यदि क्वेरी 2,147,483,647 पंक्तियों से अधिक लौटाती है)।
उदाहरण 1 - जब COUNT() ठीक हो
यहां एक बुनियादी उदाहरण दिया गया है जो एक परिदृश्य दिखा रहा है जहां दोनों COUNT()
और COUNT_BIG()
इस्तेमाल किया जा सकता है:
USE WideWorldImportersDW; SELECT COUNT(*) AS 'COUNT', COUNT_BIG(*) AS 'COUNT_BIG' FROM Fact.[Order];
परिणाम:
+---------+-------------+ | COUNT | COUNT_BIG | |---------+-------------| | 231412 | 231412 | +---------+-------------+
हम देख सकते हैं कि Fact.[Order] . में 231412 पंक्तियां हैं टेबल।
इस मामले में, दोनों फ़ंक्शन इसे संभाल सकते हैं, क्योंकि पंक्तियों की संख्या इतनी छोटी है कि इसे int में संग्रहीत किया जा सकता है। साथ ही एक बिगिंट .
हालांकि, यदि परिणाम इतना बड़ा था कि एक int इसे संग्रहीत नहीं कर सके, तब हम केवल COUNT_BIG()
. का उपयोग कर पाएंगे ।
उदाहरण 2 - जब COUNT_BIG() आवश्यक हो
यहां एक उदाहरण दिया गया है जहां आपको COUNT_BIG()
का उपयोग करने की आवश्यकता होगी ।
SELECT COUNT_BIG(*) AS 'Row Count' FROM ReallyBigTable;
परिणाम:
+-----------------+ | Row Count | |-----------------| | 9147483648 | +-----------------+
इस मामले में, पंक्तियों की संख्या इतनी बड़ी है कि एक int इसे संभालने में सक्षम नहीं होगा। सौभाग्य से हम उपयोग कर सकते हैं COUNT_BIG()
, क्योंकि यह अपना परिणाम बिगिंट . के रूप में देता है ।
दोनों प्रकार्यों के डेटा प्रकार की जांच करना
जब हम पिछले उदाहरणों को देखते हैं, तो हम वास्तव में डेटा प्रकार का नाम नहीं देख सकते हैं। हम केवल यह मान सकते हैं कि COUNT()
अपने परिणामों को int . के रूप में लौटाता है और COUNT_BIG()
बिगिन्ट . का उपयोग करता है क्योंकि Microsoft दस्तावेज़ यही कहता है (हालाँकि हम जानते हैं कि दूसरा उदाहरण int नहीं हो सकता है। क्योंकि int . के लिए मान बहुत बड़ा है )
हम sp_describe_first_result_set
. का उपयोग कर सकते हैं इन कार्यों में से प्रत्येक के रिटर्न डेटा प्रकार की जांच करने के लिए संग्रहीत प्रक्रिया।
COUNT() के लिए डेटा प्रकार जांचें
EXEC sp_describe_first_result_set N'SELECT COUNT(*) FROM Fact.[Order]', null, 0;
परिणाम (ऊर्ध्वाधर आउटपुट का उपयोग करके):
is_hidden | 0 column_ordinal | 1 name | NULL is_nullable | 1 system_type_id | 56 system_type_name | int max_length | 4 precision | 10 scale | 0 collation_name | NULL user_type_id | NULL user_type_database | NULL user_type_schema | NULL user_type_name | NULL assembly_qualified_type_name | NULL xml_collection_id | NULL xml_collection_database | NULL xml_collection_schema | NULL xml_collection_name | NULL is_xml_document | 0 is_case_sensitive | 0 is_fixed_length_clr_type | 0 source_server | NULL source_database | NULL source_schema | NULL source_table | NULL source_column | NULL is_identity_column | 0 is_part_of_unique_key | NULL is_updateable | 0 is_computed_column | 0 is_sparse_column_set | 0 ordinal_in_order_by_list | NULL order_by_is_descending | NULL order_by_list_length | NULL tds_type_id | 38 tds_length | 4 tds_collation_id | NULL tds_collation_sort_id | NULL
हां, ऐसी बहुत सी जानकारी है जिसकी हमें आवश्यकता नहीं है, लेकिन यदि आप system_type_name को देखें तो कॉलम, आप देखेंगे कि इसका मान int . है . यह हमें बताता है कि हमारी क्वेरी ने अपने परिणामों को int . के रूप में लौटा दिया है , जैसा सोचा था। आप यह भी देख सकते हैं कि max_length और परिशुद्धता मान int . के अनुरूप हैं डेटा प्रकार।
COUNT_BIG() के लिए डेटा प्रकार जांचें
इस उदाहरण के लिए, हमें केवल COUNT(*)
. को बदलना होगा COUNT_BIG(*)
. के साथ :
EXEC sp_describe_first_result_set N'SELECT COUNT_BIG(*) FROM Fact.[Order]', null, 0;
परिणाम (ऊर्ध्वाधर आउटपुट का उपयोग करके):
is_hidden | 0 column_ordinal | 1 name | NULL is_nullable | 1 system_type_id | 127 system_type_name | bigint max_length | 8 precision | 19 scale | 0 collation_name | NULL user_type_id | NULL user_type_database | NULL user_type_schema | NULL user_type_name | NULL assembly_qualified_type_name | NULL xml_collection_id | NULL xml_collection_database | NULL xml_collection_schema | NULL xml_collection_name | NULL is_xml_document | 0 is_case_sensitive | 0 is_fixed_length_clr_type | 0 source_server | NULL source_database | NULL source_schema | NULL source_table | NULL source_column | NULL is_identity_column | 0 is_part_of_unique_key | NULL is_updateable | 0 is_computed_column | 0 is_sparse_column_set | 0 ordinal_in_order_by_list | NULL order_by_is_descending | NULL order_by_list_length | NULL tds_type_id | 38 tds_length | 8 tds_collation_id | NULL tds_collation_sort_id | NULL
इस बार हम देख सकते हैं कि
system_type_name
बड़ा
है . यह हमें बताता है कि हमारा COUNT_BIG()
query ने अपने परिणाम बिगिंट . के रूप में लौटाए , जैसा सोचा था।
max_length
और
परिशुद्धता
मान बिगिन्ट . के अनुरूप भी हैं डेटा प्रकार।
वैसे, उपरोक्त करने का एक तेज़ तरीका संग्रहीत कार्यविधि को कॉल करते समय दोनों कार्यों को क्वेरी में संयोजित करना है।
इस तरह:
EXEC sp_describe_first_result_set N'SELECT COUNT(*), COUNT_BIG(*) FROM Fact.[Order]', null, 0;
यह दो पंक्तियों को आउटपुट करेगा, SELECT
. में प्रत्येक फ़ंक्शन के लिए एक बयान।