Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

किसी अन्य तालिका से मूल्यों की नेस्टेड प्रतिस्थापन कैसे करें?

अस्वीकरण:वादे के अनुसार कम किया गया फ़ंक्शन, नियत समय में तदनुसार उत्तर विवरण अपडेट करेगा।

आपकी समस्या के बारे में मेरी वर्तमान समझ के अनुसार, मुझे लगता है कि मैं इसे एक ऐसे फ़ंक्शन पर लागू कर सकता हूं जिसे मैंने हाल ही में एक अधिक जटिल समस्या को हल करने के लिए डिज़ाइन किया था। अन्य समाधान हो सकते हैं, लेकिन निश्चित रूप से अन्य लोग उन्हें प्रस्तावित कर सकते हैं और करेंगे, तो क्यों न मैं आपको कुछ कम पेशकश करने की पेशकश करूं।

हालांकि सलाह दी जाती है, यह आपकी तुलना में अधिक जटिल कुछ को संबोधित करने के लिए था (बाद में समझाया गया ), और अभी दुख की बात है कि मेरे पास इसे कम करने का समय नहीं है, लेकिन मैं शायद कल इसे प्राप्त कर लूंगा। मुझे आशा है कि टिप्पणियाँ मदद करती हैं। इसके बावजूद, मैं आपके लिए अपने कार्य के उद्देश्य को संक्षेप में बताऊंगा:

एक तालिका है जिसमें क्या संदेश ढूंढना है, और उन्हें किसके साथ बदलना है। फ़ंक्शन को इनपुट के रूप में एक टेक्स्ट मान प्राप्त होगा, उक्त तालिका को लूप करने के लिए कर्सर का उपयोग करेगा, और उक्त तालिका में प्रत्येक रिकॉर्ड के लिए यह जांच करेगा कि क्या इनपुट टेक्स्ट में बदलने के लिए कुछ है, और यदि लागू हो तो प्रतिस्थापित करें।

मूल उद्देश्य के बारे में ध्यान देने योग्य दो बातें। पहले, उस परिदृश्य को संबोधित करने के लिए एक नेस्टेड लूप है जहां एक निश्चित कीवर्ड कई बार मौजूद होता है, इसलिए कई प्रतिस्थापन की आवश्यकता होती है। दूसरा, मुझे वाइल्डकार्ड, वेरिएबल लेंथ से भी निपटना था, और चर्चा तालिका में प्रतिस्थापन ध्वज सेट किया गया है या नहीं। ये दो चीजें और अन्य शायद यही कारण हैं कि आपको बहुत सारी अजीब सामग्री इधर-उधर उड़ती हुई मिलेगी।

CREATE FUNCTION [JACKINABOX](@TextToUpdate varchar(30), @FilterId int)
RETURNS varchar(30) AS
BEGIN

    DECLARE @Keyword varchar(30)

    DECLARE LonelyCursor CURSOR FOR
        SELECT Keyword FROM ReplacementInformation WHERE Id = @FilterId

    OPEN LonelyCursor ; FETCH NEXT FROM LonelyCursor INTO @Keyword

    WHILE @@FETCH_STATUS = 0 -- While there still remains keywords to process.
    BEGIN
        WHILE 1 = 1 -- Not sure, but I think this nested loop can be unlooped if [FETCH NEXT] was cut & pasted to replace [BREAK].
        BEGIN
            IF(CHARINDEX(@Keyword, @TextToUpdate) = 0)
                BREAK -- If cannot find current keyword anymore, move on to next keyword.
            ELSE -- Otherwise, update text then check again for same keyword.
                SET @TextToUpdate = REPLACE(@TextToUpdate, @Keyword, CONCAT('Replaced_', @Keyword))
        END
        FETCH NEXT FROM LonelyCursor INTO @Keyword
    END

    CLOSE LonelyCursor ; DEALLOCATE LonelyCursor

    RETURN @TextToUpdate

END



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर 2008 एक्सप्रेस डेटाबेस पर सभी प्रश्नों को लॉग करना?

  2. दिन, महीने और वर्ष को पूर्णांक के रूप में दिए गए SQL सर्वर में दिनांक कैसे बनाएं

  3. गतिशील कॉलम के साथ एक ही पंक्ति पर एसक्यूएल एकाधिक गिनती

  4. SQL सर्वर 2019 में नया क्या है?

  5. SQL सर्वर (T-SQL) में विभाजित तालिका को क्वेरी करते समय प्रत्येक पंक्ति के लिए विभाजन संख्या लौटाएँ