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

एसक्यूएल सर्वर:एक्सएमएल के साथ इनलाइन सशर्त कन्वर्ट?

ऐसा लगता है कि आपको ISNUMERIC<के संस्करण की आवश्यकता है /ए> XML डेटा के लिए फ़ंक्शन।

अफसोस की बात है कि ऐसा कोई अंतर्निहित कार्य मौजूद नहीं है - इसलिए आपको अपना खुद का विकल्प तैयार करना होगा, जिसके लिए कुछ विकल्प हैं:

यदि यह एक बार की या छोटे पैमाने की प्रक्रिया है जिसके लिए प्रदर्शन महत्वपूर्ण नहीं है, तो आप TRY...CATCH का उपयोग करके, कर्सर के अंदर एक बार में इनपुट तालिकाओं को एक पंक्ति में संसाधित कर सकते हैं। अमान्य कास्ट (अप्रयुक्त) को संभालने के लिए ब्लॉक करें:

DECLARE xmlCur CURSOR FOR
SELECT textcol 
FROM inputTable

OPEN xmlCur
DECLARE @string nvarchar(MAX)
DECLARE @xml xml

FETCH NEXT FROM xmlCur into @string

WHILE @@fetch_status = 0
BEGIN
    BEGIN TRY
        SET @xml = CAST(@string AS XML)
        -- Do something with XML
    END TRY
    BEGIN CATCH
        -- log failure/mark source row as invalid
    END CATCH

    FETCH NEXT FROM xmlCur into @string
END

CLOSE xmlCur
DEALLOCATE xmlCur 

वैकल्पिक रूप से, यदि आप नेट प्रोग्रामिंग के साथ सहज हैं (और यह आपके सर्वर पर सक्षम है) तो आप CLR अपना खुद का IsXML फ़ंक्शन बनाने के लिए। .नेट कोड को इस थ्रेड

हो सकता है कि CLR समाधान का प्रदर्शन कर्सर से इतना बेहतर न हो - इसे स्थापित करने के लिए आपको परीक्षण करने की आवश्यकता होगी।

(कोशिश करने के लिए एक स्पष्ट बात, जो काम नहीं करती है, एक स्केलर-मूल्यवान टी-एसक्यूएल फ़ंक्शन है जो फ़ील्ड को TRY...CATCH के अंदर एक्सएमएल में डालने का प्रयास करता है। खंड मैथा। हालांकि, TRY...CATCH किसी समारोह के अंदर अनुमति नहीं है।)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. UTF-8 में xp_cmdshell के साथ फाइल करने के लिए लिखें

  2. SQL सर्वर डेटाबेस में T-SQL के साथ सभी तालिकाओं के लिए सभी अनुक्रमणिका के पुनर्निर्माण के लिए 3 तरीके

  3. यदि कोई तालिका मौजूद है तो उसे कैसे छोड़ें?

  4. तालिका नाम बनाना जो MS SQL सर्वर में आरक्षित शब्द/कीवर्ड हैं

  5. हानिकारक, व्यापक SQL सर्वर प्रदर्शन मिथक