sql >> データベース >  >> RDS >> Sqlserver

FOR XML PATH を使用するときに文字エンコードを回避するにはどうすればよいですか?

    FOR XML で適切なオプションを使用するだけです。 .エンコーディングを回避する方法の 1 つを次に示します。

    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 Server (2017 以降) を使用している場合は、STRING_AGG() XML についてまったく心配する必要はありません:

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

    db<>フィドル 3 つすべてをデモンストレーションします。



    1. Mac OS XでPostgreSQLサーバーを起動するにはどうすればよいですか?

    2. SQLServer2008-高度な検索/並べ替え

    3. MySQLでIFステートメントを使用して、ストアドプロシージャなしで更新または挿入しますか?

    4. キーの長さのないキー指定で使用されるBLOB/TEXT列の「値」