SQL वेरिएबल्स: SQL सर्वर में वेरिएबल घोषित करना, सेट करना और चुनना

⚡ स्मार्ट सारांश

SQL सर्वर में वेरिएबल्स नाम वाले ऑब्जेक्ट होते हैं जो मेमोरी में एक डेटा मान के लिए प्लेसहोल्डर के रूप में कार्य करते हैं। किसी वेरिएबल को मान असाइन करने और पुनः उपयोग करने से पहले उसे DECLARE स्टेटमेंट के साथ घोषित करना आवश्यक है।

  • 📦 परिभाषा: SQL सर्वर वेरिएबल एक ही मान रखता है और मेमोरी लोकेशन के लिए प्लेसहोल्डर के रूप में कार्य करता है।
  • 🔵 स्थानीय और वैश्विक: SQL सर्वर उन स्थानीय चरों का समर्थन करता है जिनके उपसर्ग में @ लगा होता है और जिन्हें उपयोगकर्ता घोषित करते हैं, और सिस्टम द्वारा बनाए गए वैश्विक चरों का भी समर्थन करता है जिनके उपसर्ग में @@ लगा होता है।
  • 📝 घोषणा करें: DECLARE स्टेटमेंट एक वेरिएबल बनाता है और डिफ़ॉल्ट रूप से इसे NULL से इनिशियलाइज़ करता है।
  • 🔀 तीन असाइनमेंट विधियाँ: DECLARE, SET या SELECT के दौरान एक मान निर्दिष्ट किया जा सकता है।
  • 🔎 स्केलर सबक्वेरी: SET और SELECT दोनों ही क्वेरी से एक मान को वेरिएबल में पढ़ सकते हैं।
  • 🧠 SET बनाम SELECT: SET एक वेरिएबल को असाइन करता है और ANSI मानक का पालन करता है, जबकि SELECT एक साथ कई वेरिएबल्स को असाइन कर सकता है।

SQL सर्वर वैरिएबल: डिक्लेयर, सेट और सेलेक्ट

SQL सर्वर में वेरिएबल क्या है?

In एमएस SQL ​​सर्वरवेरिएबल ऐसे ऑब्जेक्ट होते हैं जो मेमोरी लोकेशन के लिए प्लेसहोल्डर के रूप में कार्य करते हैं। एक वेरिएबल एक सिंगल डेटा वैल्यू रखता है जिसे आप बैच या प्रोसीजर में पढ़ और पुन: उपयोग कर सकते हैं।

SQL में चर प्रकार: स्थानीय, वैश्विक

एमएस एसक्यूएल सर्वर में दो प्रकार के वेरिएबल होते हैं:

  • स्थानीय चर
  • वैश्विक चर

हालांकि, उपयोगकर्ता केवल स्थानीय चर ही बना सकता है। नीचे दिया गया चित्र एमएस एसक्यूएल सर्वर में उपलब्ध दो प्रकार के चरों को दर्शाता है।

SQL सर्वर में दो प्रकार के वेरिएबल्स का आरेख: लोकल वेरिएबल्स और ग्लोबल वेरिएबल्स

स्थानीय चर

  • उपयोगकर्ता स्थानीय चर घोषित करता है।
  • डिफ़ॉल्ट रूप से, एक स्थानीय चर का नाम @ से शुरू होता है।
  • प्रत्येक स्थानीय चर किसी दिए गए सत्र के भीतर वर्तमान बैच या प्रक्रिया तक ही सीमित होता है।

वैश्विक चर

  • सिस्टम वैश्विक चर को बनाए रखता है; उपयोगकर्ता इसे घोषित नहीं कर सकता।
  • एक ग्लोबल वेरिएबल का नाम @@ से शुरू होता है।
  • यह सत्र से संबंधित जानकारी संग्रहीत करता है।

SQL में किसी चर को कैसे घोषित करें?

किसी बैच या प्रक्रिया में किसी भी वेरिएबल का उपयोग करने से पहले एसक्यूएलआपको इसे घोषित करना होगा। DECLARE कमांड एक वेरिएबल बनाता है जो मेमोरी लोकेशन के लिए प्लेसहोल्डर के रूप में कार्य करता है। घोषणा हो जाने के बाद ही इस वेरिएबल का उपयोग बैच या प्रक्रिया के बाद के भाग में किया जा सकता है।

TSQL सिंटैक्स:

DECLARE  { @LOCAL_VARIABLE[AS] data_type  [ = value ] }

नियम:

  • घोषणा करते समय आरंभीकरण वैकल्पिक है।
  • डिफ़ॉल्ट रूप से, DECLARE वेरिएबल को NULL से इनिशियलाइज़ करता है।
  • कीवर्ड 'AS' का प्रयोग वैकल्पिक है।
  • एक से अधिक स्थानीय चर घोषित करने के लिए, पहली परिभाषा के बाद अल्पविराम लगाएं, फिर अगले चर का नाम दें और डाटा प्रकार.

चर घोषित करने के उदाहरण

प्रश्न: 'AS' के साथ

DECLARE @COURSE_ID AS INT;

प्रश्न: 'AS' के बिना

DECLARE @COURSE_NAME VARCHAR (10);

प्रश्न: दो चर घोषित करें

DECLARE @COURSE_ID AS INT, @COURSE_NAME VARCHAR (10);

SQL वेरिएबल को मान निर्दिष्ट करना

आप निम्नलिखित तीन तरीकों से किसी वेरिएबल को मान असाइन कर सकते हैं:

  • DECLARE कीवर्ड का उपयोग करके वेरिएबल घोषित करते समय।
  • SET का उपयोग करना।
  • SELECT का उपयोग करना।

आइए इन तीनों तरीकों को विस्तार से देखें।

चर घोषणा के दौरान DECLARE कीवर्ड का उपयोग करना

टी-एसक्यूएल सिंटैक्स:

DECLARE { @Local_Variable [AS] Datatype [ = value ] }

यहां, डेटाटाइप के बाद आप '=' का उपयोग कर सकते हैं, जिसके बाद असाइन किया जाने वाला मान आता है।

प्रश्न:

DECLARE @COURSE_ID AS INT = 5
PRINT @COURSE_ID

क्वेरी चलाने पर घोषणा के दौरान असाइन किया गया मान प्रिंट होता है, जैसा कि नीचे दिखाया गया है।

DECLARE के दौरान असाइन किए गए वेरिएबल का आउटपुट, मान 5 प्रिंट करता है

SQL SET वेरिएबल का उपयोग करना

कभी-कभी आप घोषणा और आरंभीकरण को अलग रखना चाहते हैं। SET वेरिएबल की घोषणा के बाद उसे मान असाइन करता है। SET का उपयोग करके मान असाइन करने के विभिन्न तरीके नीचे दिए गए हैं।

उदाहरण: SET का उपयोग करके किसी वेरिएबल को मान असाइन करना

सिंटेक्स:

DECLARE @Local_Variable <Data_Type>
SET @Local_Variable =  <Value>

प्रश्न:

DECLARE @COURSE_ID AS INT
SET @COURSE_ID = 5
PRINT @COURSE_ID

स्क्रिप्ट को निष्पादित करने पर SET के साथ असाइन किया गया मान वापस मिलता है, जैसा कि नीचे दिखाया गया है।

SET का उपयोग करके किसी वेरिएबल को मान असाइन करने का आउटपुट, 5 प्रिंट करना

उदाहरण: SET का उपयोग करके एकाधिक चरों को मान असाइन करना

सिंटेक्स:

DECLARE @Local_Variable _1 <Data_Type>, @Local_Variable_2 <Data_Type>,
SET @Local_Variable_1 = <Value_1>
SET @Local_Variable_2 = <Value_2>

नियम: एक SET कीवर्ड केवल एक वेरिएबल को ही मान निर्दिष्ट कर सकता है।

प्रश्न:

DECLARE @COURSE_ID as INT, @COURSE_NAME AS VARCHAR(5)
SET @COURSE_ID = 5
SET @COURSE_NAME = 'UNIX'
PRINT @COURSE_ID
PRINT @COURSE_NAME

नीचे दिखाए अनुसार, दोनों PRINT स्टेटमेंट असाइन किए गए मानों को लौटाते हैं।

SET कमांड का उपयोग करके दो वेरिएबल्स को असाइन करने पर आउटपुट, 5 और UNIX प्रिंट होता है।

उदाहरण: SET का उपयोग करके स्केलर सबक्वेरी के साथ किसी वेरिएबल को मान असाइन करना

सिंटेक्स:

DECLARE @Local_Variable_1 <Data_Type>, @Local_Variable_2 <Data_Type>,SET @Local_Variable_1 = (SELECT <Column_1> from <Table_Name> where <Condition_1>)

नियम:

  • प्रश्न को कोष्ठकों में लिखें।
  • यह क्वेरी स्केलर क्वेरी होनी चाहिए, जिसका अर्थ है कि यह केवल एक पंक्ति और एक कॉलम लौटाती है। अन्यथा, क्वेरी त्रुटि उत्पन्न करेगी।
  • यदि क्वेरी शून्य पंक्तियाँ लौटाती है, तो वेरिएबल को EMPTY यानी NULL पर सेट कर दिया जाता है।

मान लीजिए कि हमारे पास है तालिका नामित 'Guruनीचे दिखाए गए अनुसार, दो स्तंभों वाली तालिका '99' का उपयोग किया गया है। इस तालिका का उपयोग निम्नलिखित उदाहरणों में किया गया है।

Guruउदाहरणों में उपयोग किए गए ट्यूटोरियल_आईडी और ट्यूटोरियल_नाम कॉलम वाली तालिका 99

उदाहरण 1: जब सबक्वेरी परिणाम के रूप में एक पंक्ति लौटाती है

DECLARE @COURSE_NAME VARCHAR (10)
SET @COURSE_NAME = (select Tutorial_name from Guru99 where Tutorial_ID = 3)
PRINT @COURSE_NAME

क्योंकि सबक्वेरी एक मेल खाने वाली पंक्ति लौटाती है, इसलिए वेरिएबल को वह मान प्राप्त होता है, जैसा कि नीचे दिखाया गया है।

SET असाइन किए गए स्केलर सबक्वेरी का आउटपुट, मिलान किए गए ट्यूटोरियल का नाम प्रिंट करता है।

उदाहरण 2: जब सबक्वेरी परिणाम स्वरूप शून्य पंक्तियाँ लौटाती है

DECLARE @COURSE_NAME VARCHAR (10)
SET @COURSE_NAME = (select Tutorial_name from Guru99 where Tutorial_ID = 5)
PRINT @COURSE_NAME

क्योंकि सबक्वेरी कोई पंक्ति नहीं लौटाती है, इसलिए वेरिएबल का मान खाली है, यानी NULL है, इसलिए कुछ भी प्रिंट नहीं होता है, जैसा कि नीचे दिखाया गया है।

SET स्केलर सबक्वेरी का आउटपुट जो कोई पंक्ति नहीं लौटाता, जिससे वेरिएबल NULL रह जाता है।

SQL SELECT वेरिएबल का उपयोग करना

SET की तरह ही, DECLARE फ़ंक्शन का उपयोग करके वेरिएबल घोषित करने के बाद SELECT फ़ंक्शन का उपयोग करके भी उन्हें मान असाइन किए जा सकते हैं। नीचे SELECT का उपयोग करके मान असाइन करने के विभिन्न तरीके दिए गए हैं।

उदाहरण: SELECT का उपयोग करके किसी वेरिएबल को मान असाइन करना

सिंटेक्स:

DECLARE @LOCAL_VARIABLE <Data_Type>
SELECT @LOCAL_VARIABLE = <Value>

प्रश्न:

DECLARE @COURSE_ID INT
SELECT @COURSE_ID = 5
PRINT @COURSE_ID

SELECT असाइनमेंट नीचे दिखाए गए अनुसार मान को प्रिंट करता है।

SELECT का उपयोग करके किसी वेरिएबल को मान असाइन करने का आउटपुट, प्रिंट करते समय 5 आता है।

उदाहरण: SELECT फ़ंक्शन का उपयोग करके एकाधिक चरों को मान निर्दिष्ट करना

सिंटेक्स:

DECLARE @Local_Variable _1 <Data_Type>, @Local_Variable _2 <Data_Type>,SELECT @Local_Variable _1 = <Value_1>,  @Local_Variable _2 = <Value_2>

नियम: SET के विपरीत, SELECT अल्पविराम से अलग किए गए कई चरों को मान निर्दिष्ट कर सकता है।

DECLARE @COURSE_ID as INT, @COURSE_NAME AS VARCHAR(5)
SELECT @COURSE_ID = 5, @COURSE_NAME = 'UNIX'
PRINT @COURSE_ID
PRINT @COURSE_NAME

नीचे दिखाए अनुसार, दोनों वेरिएबल्स को एक ही SELECT क्वेरी में असाइन किया जाता है।

एक ही SELECT कमांड से दो वेरिएबल असाइन करने पर आउटपुट में 5 और UNIX प्रिंट होता है।

उदाहरण: SELECT क्वेरी का उपयोग करके सबक्वेरी के माध्यम से किसी वेरिएबल को मान असाइन करना

सिंटेक्स:

DECLARE @Local_Variable_1 <Data_Type>, @Local_Variable _2 <Data_Type>,SELECT @Local_Variable _1 = (SELECT <Column_1> from <Table_name> where <Condition_1>)

नियम:

  • प्रश्न को कोष्ठकों में लिखें।
  • क्वेरी एक स्केलर क्वेरी होनी चाहिए जो एक पंक्ति और एक कॉलम लौटाए। अन्यथा, क्वेरी त्रुटि उत्पन्न करेगी।
  • यदि क्वेरी शून्य पंक्तियाँ लौटाती है, तो वेरिएबल खाली है, यानी NULL है।

हमारे 'पर पुनर्विचार करें'Guru99' टेबल।

उदाहरण 1: जब सबक्वेरी परिणाम के रूप में एक पंक्ति लौटाती है

DECLARE @COURSE_NAME VARCHAR (10)
SELECT @COURSE_NAME = (select Tutorial_name from Guru99 where Tutorial_ID = 1)
PRINT @COURSE_NAME

सबक्वेरी एक पंक्ति लौटाती है, इसलिए वेरिएबल उस मान को धारण करता है, जैसा कि नीचे दिखाया गया है।

SELECT फ़ंक्शन से असाइन किए गए स्केलर सबक्वेरी का आउटपुट, मिलान किए गए ट्यूटोरियल का नाम प्रिंट करता है।

उदाहरण 2: जब सबक्वेरी परिणाम स्वरूप शून्य पंक्तियाँ लौटाती है

DECLARE @COURSE_NAME VARCHAR (10)
SELECT @COURSE_NAME = (select Tutorial_name from Guru99 where Tutorial_ID = 5)
PRINT @COURSE_NAME

कोई मेल खाने वाली पंक्ति न होने पर, चर खाली रहता है, यानी NULL, जैसा कि नीचे दिखाया गया है।

एक SELECT स्केलर सबक्वेरी का आउटपुट जो कोई पंक्ति नहीं लौटाता है, जिससे वेरिएबल NULL रह जाता है।

उदाहरण 3: एक सामान्य SELECT स्टेटमेंट का उपयोग करके किसी वेरिएबल को मान असाइन करना

सिंटेक्स:

DECLARE @Local_Variable _1 <Data_Type>, @Local_Variable _2 <Data_Type>,SELECT @Local_Variable _1 = <Column_1> from <Table_name> where <Condition_1>

नियम:

  • SET के विपरीत, यदि क्वेरी कई पंक्तियाँ लौटाती है तो वेरिएबल का मान अंतिम पंक्ति के मान पर सेट किया जाता है।
  • यदि क्वेरी शून्य पंक्तियाँ लौटाती है, तो वेरिएबल को EMPTY यानी NULL पर सेट कर दिया जाता है।

क्वेरी 1: यह क्वेरी एक पंक्ति लौटाती है।

DECLARE @COURSE_NAME VARCHAR (10)
SELECT @COURSE_NAME = Tutorial_name from Guru99 where Tutorial_ID = 3
PRINT @COURSE_NAME

मिलान करने वाली एकमात्र पंक्ति चर का मान निर्धारित करती है, जैसा कि नीचे दिखाया गया है।

एक नियमित SELECT असाइनमेंट का आउटपुट जो एक पंक्ति लौटाता है

क्वेरी 2: यह क्वेरी कई पंक्तियाँ लौटाती है।

DECLARE @COURSE_NAME VARCHAR (10)
SELECT @COURSE_NAME = Tutorial_name from Guru99
PRINT @COURSE_NAME

जब कई पंक्तियाँ मेल खाती हैं, तो चर अंतिम पंक्ति से मान रखता है, जैसा कि नीचे दिखाया गया है।

एक नियमित SELECT असाइनमेंट का आउटपुट जो कई पंक्तियाँ लौटाता है, उसे रखें।ping अंतिम पंक्ति मान

प्रश्न 3: यह प्रश्न शून्य पंक्तियाँ लौटाता है।

DECLARE @COURSE_NAME VARCHAR (10)
SELECT @COURSE_NAME = Tutorial_name from Guru99 where Tutorial_ID = 5
PRINT @COURSE_NAME

जब कोई पंक्ति मेल नहीं खाती है, तो चर खाली होता है, यानी NULL होता है, जैसा कि नीचे दिखाया गया है।

एक सामान्य SELECT असाइनमेंट का आउटपुट जो कोई पंक्ति नहीं लौटाता है, जिससे वेरिएबल NULL रह जाता है।

अन्य SQL चर उदाहरण

एक घोषित वेरिएबल का उपयोग क्वेरी के अंदर भी किया जा सकता है, उदाहरण के लिए पंक्तियों को फ़िल्टर करने के लिए WHERE क्लॉज़ में।

प्रश्न:

DECLARE @COURSE_ID Int = 1
SELECT * from Guru99 where Tutorial_id = @COURSE_ID

यह वेरिएबल क्वेरी को फ़िल्टर करता है और मिलान करने वाली पंक्ति लौटाता है, जैसा कि नीचे दिखाया गया है।

फ़िल्टर करने के लिए WHERE क्लॉज़ में वेरिएबल का उपयोग करने का आउटपुट Guru99 तालिका

SQL सर्वर वेरिएबल्स के बारे में रोचक तथ्य!

  • लोकल वेरिएबल को PRINT और SELECT दोनों कमांड का उपयोग करके प्रदर्शित किया जा सकता है।
  • टेबल डेटा प्रकार घोषणा के दौरान 'AS' के उपयोग की अनुमति नहीं देता है।
  • SET, ANSI मानकों का अनुपालन करता है, जबकि SELECT नहीं करता है।
  • @ नाम का एक स्थानीय चर बनाना भी अनुमत है। उदाहरण के लिए, इसे इस प्रकार घोषित किया जा सकता है:
'DECLARE @@ as VARCHAR (10)'

अक्सर पूछे जाने वाले प्रश्न

DECLARE फ़ंक्शन को बिना असाइनमेंट के चलाने के बाद, SQL Server वेरिएबल में NULL मान होता है। वेरिएबल मौजूद तो होता है, लेकिन जब तक आप DECLARE फ़ंक्शन के साथ =, SET या SELECT का उपयोग करके उसे मान असाइन नहीं करते, तब तक उसका कोई मान नहीं होता। असाइनमेंट से पहले उसे संदर्भित करने पर भी NULL ही प्राप्त होता है।

जब सबक्वेरी कोई पंक्ति नहीं लौटाती है, तो SET NULL असाइन करता है और किसी भी वर्तमान मान को ओवरराइट कर देता है। इसके विपरीत, SELECT चर को अपरिवर्तित छोड़ देता है।ping इसमें पहले से जो भी मान हो। यह अंतर तब मायने रखता है जब वेरिएबल का मान शुरुआत में नॉन-NULL हो।

DECLARE @t TABLE(…) के रूप में घोषित एक टेबल वेरिएबल, एक बैच तक सीमित एक छोटा परिणाम सेट संग्रहीत करता है। #temp टेबल के विपरीत, यह केवल अपने बैच के भीतर ही रहता है, निर्माण के बाद इसे बदला नहीं जा सकता है, और अक्सर छोटे डेटासेट के लिए उपयुक्त होता है।

एक लोकल वेरिएबल केवल उसी बैच, स्टोर्ड प्रोसीजर या ट्रिगर तक सीमित होता है जहाँ इसे एक ही सेशन के भीतर घोषित किया जाता है। GO कीवर्ड बैच को समाप्त करता है, इसलिए GO से पहले घोषित वेरिएबल को GO के बाद संदर्भित नहीं किया जा सकता है।

एक वेरिएबल लगभग किसी भी SQL सर्वर का उपयोग कर सकता है। डाटा प्रकारइसमें int, decimal, varchar, nvarchar, date, datetime, bit और table शामिल हैं। अप्रत्यक्ष रूपांतरण त्रुटियों से बचने के लिए चर को उस कॉलम से मिलाएं जिसका वह प्रतिनिधित्व करता है।

SET फ़ंक्शन का उपयोग करके वेरिएबल को स्वयं को ही पुनः असाइन करें, उदाहरण के लिए SET @counter = @counter + 1। SELECT फ़ंक्शन भी काम करता है: SELECT @total = @total + price। यह पैटर्न स्क्रिप्ट और स्टोर्ड प्रोसीजर के अंदर लूप और रनिंग टोटल को संचालित करता है।

हां. गिटहब कोपिलॉट यह सामान्य भाषा की टिप्पणियों से DECLARE, SET और SELECT कथन उत्पन्न कर सकता है और उपयुक्त डेटा प्रकारों का सुझाव दे सकता है। उत्पादन में चलाने से पहले उत्पन्न नामों, प्रकारों और असाइनमेंट लॉजिक की अपने स्कीमा के साथ समीक्षा अवश्य करें।

एआई और मशीन लर्निंग सहायक tracयह बताता है कि वैरिएबल मान कैसे प्राप्त करते हैं और पास करते हैं, अपरिभाषित या गलत प्रकार के वैरिएबल को चिह्नित करता है, और धीमे वैरिएबल-चालित लूपों को बदलने के लिए सेट-आधारित पुनर्लेखन का सुझाव देता है। डेवलपर अभी भी वास्तविक डेटा और कार्यभार के आधार पर प्रत्येक परिवर्तन की पुष्टि करता है।

इस पोस्ट को संक्षेप में इस प्रकार लिखें: