I am trying read from the nodes of a column -where an XML string is stored. The column is of type NVARCHAR(MAX).
The following is the script to create table - SET ANSI_NULLS ON GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[XML_Dummy](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](50) NULL,
[XMLValue] [nvarchar](max) NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
The following is the script to enter values to it -
INSERT INTO [dbo].[XML_Dummy]
([Name]
,[XMLValue])
VALUES
('abcd'
,'<?xml version="1.0" encoding="UTF-8"?>
<STAFFv xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<EMPLOYEE_NUMBER>123456</EMPLOYEE_NUMBER>
<TITLE>Mr</TITLE>
<INITIALS>J</INITIALS>
<FORENAME>PEARL</FORENAME>
<SURNAME>HOFFMAN</SURNAME>
<GENDER>MALE</GENDER>
<DATE_OF_BIRTH>1992-01-01</DATE_OF_BIRTH>
<DEPARTMENT_DESC>SUPER SUPPORT TEAM</DEPARTMENT_DESC>
<JOB_TITLE_DESC>GENERAL DOGSBODY</JOB_TITLE_DESC>
<ORIGINAL_DATE_JOINED>2014-05-01</ORIGINAL_DATE_JOINED>
<CURRENT_EMPLOYEE financialyear="2014">Y</CURRENT_EMPLOYEE>
<INTERNAL_EMAIL xsi:nil="true" />
<CHANGE_TYPE>INSERT</CHANGE_TYPE>
<CHANGE_DATE>2014-03-27</CHANGE_DATE>
</STAFF>')
GO
My goal is to get the GENDER from this string. However to start with when I am writing the following query -
declare @XMLVALUECAST_ xml
declare @XMLVALUECONVERT_ xml
SELECT
@XMLVALUECAST_ = CAST(XMLValue AS XML),
@XMLVALUECONVERT_ = CONVERT(XML, XMLValue)
--CAST(CAST(CAST(XMLValue AS NTEXT) AS XML).query('data(/STAFF/GENDER)') AS VARCHAR(10)) AS Gender
FROM
[dbo].[XML_Dummy]
print @XMLVALUECAST_
PRINT @XMLVALUECONVERT_
I get the error - Msg 9402, Level 16, State 1, Line 3 XML parsing: line 1, character 38, unable to switch the encoding.
I am using SQL Server 2012 (11.0.5058.0)