Search code examples
sql-serversql-server-2008sqlxml

Cast xml to varchar with no entities


This code

    DECLARE @x xml
SET @x = ( SELECT 'A & B > C' FOR XML PATH('') )
PRINT CAST(@x AS nvarchar(1000))

Return:

A & B > C

How obtain my original string 'A & B > C'? (with no XML entities)


Solution

  • DECLARE @x xml
    SET @x = ( SELECT 'A & B > C' FOR XML PATH('') )
    
    SELECT @x.value('.', 'nvarchar(1000)')
    

    If you absolutely need to use print you have to store the result from value in variable before printing.

    DECLARE @x xml
    SET @x = ( SELECT 'A & B > C' FOR XML PATH('') )
    
    DECLARE @y nvarchar(1000)
    SET @y = @x.value('.', 'nvarchar(1000)')
    
    PRINT @y
    

    Result:

    A & B > C