STUFF नामक SQL सर्वर फ़ंक्शन के आसपास मुख्य विचार CONCAT फ़ंक्शन प्रदान करने की तुलना में अधिक लचीलेपन के साथ कई स्तंभों को एक कॉलम में संयोजित करना है। इसके अलावा, कुछ दिलचस्प प्रभावों के लिए STUFF को अन्य तकनीकों के साथ जोड़ा जा सकता है।
इस लेख में, हम उन संभावनाओं का पता लगाएंगे जो STUFF कमांड SQL डेटाबेस विशेषज्ञों के लिए प्रदान करती है।
टी-एसक्यूएल स्टफ फंक्शन
आइए सबसे पहले STUFF फ़ंक्शन की आधिकारिक Microsoft परिभाषा पर एक नज़र डालें:
STUFF फ़ंक्शन एक स्ट्रिंग को दूसरी स्ट्रिंग में सम्मिलित करता है। यह प्रारंभ स्थिति में पहली स्ट्रिंग में वर्णों की एक निर्दिष्ट लंबाई को हटा देता है और फिर दूसरी स्ट्रिंग को प्रारंभ स्थिति में पहली स्ट्रिंग में सम्मिलित करता है।
इस प्रकार, जब आप STUFF कमांड का उपयोग कर रहे होते हैं, तो आप कॉलम डेटा को पुनर्व्यवस्थित कर रहे होते हैं।
आइए कुछ उदाहरण देखें।
पहला STUFF कमांड से आउटपुट है - मूल ABCDEFG स्ट्रिंग को XXX स्ट्रिंग से भरा जाएगा।
SELECT STUFF('ABCDEFG',3,3,'XXX');
हम STUFF कमांड को पूरी तरह से समझने के लिए इस आउटपुट का विश्लेषण करेंगे:
अब, तीसरे पैरामीटर को बढ़ाकर 4,5,6 कर दिया गया है।
SELECT STUFF('ABCDEFG',3,4,'XXX');
SELECT STUFF('ABCDEFG',3,5,'XXX');
SELECT STUFF('ABCDEFG',3,6,'XXX');
फ़ंक्शन कॉल स्पष्टीकरण
प्रतिस्थापन प्रत्येक निष्पादन में मूल ABCDEFG स्ट्रिंग के तीसरे वर्ण पर होता है। केवल अंतर केवल लंबाई पैरामीटर हटाएं . के माध्यम से हटाने के लिए निर्दिष्ट वर्णों की संख्या है ।
इस प्रकार, जब लंबाई हटाएं आरंभिक स्थिति . से पैरामीटर पैरामीटर मूल स्ट्रिंग से लंबा है, डेटा छोटा कर दिया गया है।
उदाहरण के लिए, हमारी मूल स्ट्रिंग 7 वर्ण लंबी है। STUFF फ़ंक्शन स्थिति 3 से शुरू होता है और 5 और वर्णों के लिए चलता है। चूंकि 8 मूल स्ट्रिंग लंबाई 7 से अधिक है, इसलिए मान ABXXX के रूप में लौटाया जाता है।
एक ही प्रश्न में STUFF का एकाधिक उपयोग
आप STUFF कमांड को किसी अन्य STUFF कमांड में नेस्ट कर सकते हैं और आवश्यकतानुसार कई बार इसका उपयोग कर सकते हैं। हालांकि, आपको यह विचार करना चाहिए कि यह उत्पादन स्तर के प्रश्नों को कैसे प्रभावित करता है। लौटाए गए डेटा की प्रत्येक पंक्ति के लिए प्रत्येक नेस्टेड कॉल चल रही है।
SELECT STUFF(STUFF('ABCDEFG',1,1,'1'),7,1,'7') as StuffExample5;
इस उदाहरण में, मूल स्ट्रिंग के पहले वर्ण को 1 वर्ण से बदल दिया जाता है, और अंतिम वर्ण को 7 वर्ण से बदल दिया जाता है।
STUFF और ForXML
ForXML SQL सर्वर में एक विशेषता है जो SQL क्वेरी के परिणाम सेट को XML स्वरूपित परिणामों में बदल सकती है।
STUFF को अन्य SQL सर्वर कार्यक्षमता जैसे ForXML के साथ भी जोड़ा जा सकता है। यह रिपोर्टिंग उद्देश्यों के लिए डेटा को समेकित करने में मदद करता है। आइए निम्न तालिका संरचना लें:
मान लीजिए आप 2 कॉलम वाली रिपोर्ट चाहते हैं। पहला कॉलम है USER_NAME , और दूसरा अल्पविराम से अलग की गई भूमिका . है उपयोगकर्ता की प्रत्येक भूमिका के लिए कॉलम। इसे शुद्ध टी-एसक्यूएल में कैसे पूरा किया जा सकता है?
तालिका संरचना बनाएं और डेटा डालें:
CREATE TABLE
#USER
(
USER_ID INT,
USER_NAME VARCHAR(50)
)
CREATE TABLE
#USER_ROLES
(
USER_ID INT,
ROLE VARCHAR(50)
)
INSERT INTO #USER VALUES(1,'Edward')
INSERT INTO #USER VALUES(2,'John')
INSERT INTO #USER VALUES(3,'Mark')
INSERT INTO #USER_ROLES VALUES(1,'Admin')
INSERT INTO #USER_ROLES VALUES(1,'Writer')
INSERT INTO #USER_ROLES VALUES(1,'Form')
INSERT INTO #USER_ROLES VALUES(2,'Writer')
INSERT INTO #USER_ROLES VALUES(3,'Form')
INSERT INTO #USER_ROLES VALUES(3,'Writer');
STUFF कमांड का प्रयोग करें:
SELECT
U.USER_NAME,
STUFF((SELECT ',' + UR.ROLE
FROM #USER_ROLES UR
WHERE UR.USER_ID = U.USER_ID
FOR XML PATH('')), 1, 1, '') [ROLES]
FROM #USER U
GROUP BY U.USER_NAME, U.USER_ID
ORDER BY 1
इस उदाहरण में, प्रत्येक USER_ID से एक आंतरिक क्वेरी जुड़ी हुई है। STUFF कमांड का उपयोग प्रारंभिक अल्पविराम को बदलने के लिए किया जाता है। परिणामस्वरूप, हमारे पास संबंधित भूमिकाओं वाले प्रत्येक उपयोगकर्ता की एक अच्छी अल्पविराम से अलग की गई सूची है।
मामलों का उपयोग करें
डेटा मास्किंग
SQL सर्वर डायनेमिक डेटा मास्किंग के लिए समाधान प्रदान करता है। हालाँकि, STUFF का उपयोग संवेदनशील डेटा को प्रदर्शित होने पर अस्पष्ट करने के लिए किया जा सकता है। एक तालिका के शीर्ष पर बैठे एक दृश्य की कल्पना करें जिसमें ग्राहक PII फ़ील्ड जैसे SSN हों। SSN के अंतिम 4 अंकों को छोड़कर, दृश्य सब कुछ छिपाने के लिए STUFF कमांड का उपयोग कर सकता है।
डेटा समेकन
जैसा कि FORXML और STUFF के साथ प्रदर्शित किया गया है, T-SQL किसी प्रकार के प्राथमिक पहचानकर्ता के साथ एकल कॉलम में डेटा को समेकित करने की क्षमता प्रदान करता है। इस उदाहरण में, यह USER_NAME था। हालांकि, डेटाबेस रिपोर्टिंग आर्किटेक्चर में इस प्रकार का विश्लेषण काफी सामान्य है।
सारांश
इस प्रकार, हमने T-SQL में STUFF कमांड के मापदंडों को कवर किया और समझा कि यह कमांड CONCAT से कैसे तुलना करता है। हमने STUFF कमांड के सरल और जटिल दोनों उदाहरणों का प्रदर्शन किया और कुछ उपयोग मामलों को सूचीबद्ध किया जिनके लिए STUFF लागू हो सकता है।
यह एक मूल्यवान आदेश है जो आपके बेल्ट के नीचे एक महान उपकरण हो सकता है। कृपया STUFF कमांड के लिए अन्य उपयोग के मामलों के साथ टिप्पणी करें।