स्ट्रिंग्स को जोड़ने के लिए SQL सर्वर फंक्शन
अच्छी तरह से स्वरूपित पाठ प्रदर्शित करना
यह फ़ंक्शन एक अच्छी तरह से स्वरूपित स्ट्रिंग में एक पता प्रदर्शित करने की आवश्यकता से पैदा हुआ था। इस प्रकार के डेटा के साथ काम करते समय, डेटा फ़ील्ड में अक्सर रिक्त, NULL मान और कभी-कभी अलग किए गए टेक्स्ट होते हैं। स्तंभों के मानक संयोजन ने अंत में रिक्त स्थान या अल्पविराम के साथ दोहरे सीमांकक का नेतृत्व किया।
इसे ध्यान में रखते हुए, हमें डेटा को अलग करने, रिक्त स्थान को छोड़कर, सफेद स्थान को ट्रिम करने और पीछे के डेटा को हटाने के तरीके की आवश्यकता थी। अकेले मानक COALESCE का उपयोग करने के कई तरीके हैं, लेकिन इसने इसे रिक्त स्थान से बिल्कुल नहीं काटा।
हमने टेक्स्ट को विभाजित और सॉर्ट करने के लिए अपने आजमाए हुए और परीक्षण किए गए TextToRows फ़ंक्शन का उपयोग किया, फिर टेक्स्ट मानों को वापस एक नई स्ट्रिंग में लिखा। इसका लाभ यह है कि डेटा इनपुट और आउटपुट दोनों के लिए आपकी पसंद के सीमांकक के साथ पुन: उपयोग योग्य है।
SQL
ALTER FUNCTION dbo.TextConc(@Text NVARCHAR(MAX),@Delim CHAR(1),@Sep CHAR(2)) RETURNS NVARCHAR(MAX) WITH SCHEMABINDING AS BEGINDECLARE @Str NVARCHAR(MAX)SELECT @Str=COALESCE(@Str+@Sep,'')+REPLACE(WordStr,@Delim,'')FROM dbo.TextToRows(@Delim,@Text)WHERE WordStr<>''RETURN REPLACE(@Str,@Sep+@Sep,@Sep)ENDGO
परीक्षण डेटा
परीक्षण उद्देश्यों के लिए हम एक अस्थायी तालिका बना सकते हैं और कुछ पते संग्रहीत कर सकते हैं। चयन कथन को फ़ंक्शन के साथ संयोजित करें और आप देख सकते हैं कि यह कैसे एक कुरकुरा स्वरूपित डेटा सेट देता है जो प्रदर्शन उद्देश्यों के लिए एकदम सही है।
SQL
DECLARE @Address TABLE(AddressName NVARCHAR(100),AddressL1 NVARCHAR(100),AddressL2 NVARCHAR(100),AddressL3 NVARCHAR(100),AddressCity NVARCHAR(100),AddressCounty NVARCHAR(100),AddressCountry NVARCHAR(100),AddressPostCode NVARCHAR(100))INSERT INTO @AddressSELECT 'Mountain View','1600 Amphitheatre Parkway',NULL,NULL,'Mountain View','California','United States','94043'INSERT INTO @AddressSELECT 'London','1-13 St Giles High St',NULL,NULL,'London','London','United Kingdom','WC2H 8LG'SELECT dbo.TextConc(ISNULL(AddressName,'')+','+ISNULL(AddressL1,'')+','+ISNULL(AddressL2,'')+','+ISNULL(AddressL3,'')+','+ISNULL(AddressCity,'')+','+ISNULL(AddressCounty,'')+','+ISNULL(AddressCountry,'')+','+ISNULL(AddressPostCode,''),',',', ')FROM @Address
Results
तालिका में डेटा जारी रखें
जैसा कि हमने SCHEMABINDING के साथ डेटा बनाया है, हम इसे एक गणना कॉलम के रूप में एक तालिका में भी जोड़ सकते हैं।
ध्यान दें, इन्हें जोड़ते समय, यह क्वेरी प्रदर्शन को प्रभावित कर सकता है, इसलिए हम आम तौर पर डेटा को बनाए रखने की कोशिश करते हैं, यह वास्तव में डेटा को तालिका में संग्रहीत करता है, और इसकी गणना केवल सम्मिलित/अद्यतन लेनदेन पर की जाती है।
SQL
CREATE TABLE TestAddress(AddressName NVARCHAR(100),AddressL1 NVARCHAR(100),AddressL2 NVARCHAR(100),AddressL3 NVARCHAR(100),AddressCity NVARCHAR(100),AddressCounty NVARCHAR(100),AddressCountry NVARCHAR(100),AddressPostCode NVARCHAR(100),AddressDisplay as dbo.TextConc(ISNULL(AddressName,'')+','+ISNULL(AddressL1,'')+','+ISNULL(AddressL2,'')+','+ISNULL(AddressL3,'')+','+ISNULL(AddressCity,'')+','+ISNULL(AddressCounty,'')+','+ISNULL(AddressCountry,'')+','+ISNULL(AddressPostCode,''),',',', ') PERSISTED)INSERT INTO TestAddressSELECT 'Mountain View','1600 Amphitheatre Parkway',NULL,NULL,'Mountain View','California','United States','94043'INSERT INTO TestAddressSELECT 'London','1-13 St Giles High St',NULL,NULL,'London','London','United Kingdom','WC2H 8LG'SELECT * FROM TestAddressDROP TABLE TestAddress