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

एक्सएमएल पथ के लिए उपयोग करते समय मैं चरित्र एन्कोडिंग से कैसे बचूं?

आपको बस FOR XML . के साथ सही विकल्पों का उपयोग करने की आवश्यकता है . यहाँ एक तरीका है जो एन्कोडिंग से बचा जाता है:

USE tempdb;
GO

CREATE TABLE dbo.x(y nvarchar(255));

INSERT dbo.x SELECT 'Sports & Recreation'
   UNION ALL SELECT 'x >= y'
   UNION ALL SELECT 'blat'
   UNION ALL SELECT '<hooah>';

-- BAD:
SELECT STUFF((SELECT N',' + y
  FROM dbo.x 
  FOR XML PATH(N'')),1, 1, N'');

-- GOOD:
SELECT STUFF((SELECT N',' + y
  FROM dbo.x 
  FOR XML PATH, TYPE).value(N'.[1]', N'nvarchar(max)'),1, 1, N'');

GO
DROP TABLE dbo.x;

यदि आप SQL सर्वर (2017+) के नए संस्करण पर हैं, तो आप STRING_AGG() और एक्सएमएल के बारे में बिल्कुल भी चिंता न करें:

SELECT STRING_AGG(y, N',') FROM dbo.x;

db<>fiddle तीनों का प्रदर्शन।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. न्यूल के बजाय मैं चयन कथन एसक्यूएल के परिणामस्वरूप `0` कैसे दिखा सकता हूं?

  2. SQL सर्वर में चयन क्वेरी में कॉलम उपनाम को समझें - SQL सर्वर / TSQL ट्यूटोरियल भाग 115

  3. ओलेडीबी बनाम एसक्यूएल क्लाइंट के पक्ष और विपक्ष क्या हैं?

  4. पैरामीटर के साथ DISTINCT का उपयोग करते समय स्टेटमेंट प्रदर्शन में गिरावट का चयन करें

  5. एक लेनदेन में एकाधिक डीबी के साथ विदेशी कुंजी समस्या