Вам необходимо включить пространство имен в выражение value
:
WITH XMLNAMESPACES ('http://test.com/xmlschema/Data_Schema.xsd' AS x1)
SELECT PersonLevel.value('(x1:Email)[1]', 'nvarchar(64)') AS [Email],
PersonLevel.value('(x1:FirstName)[1]', 'nvarchar(64)') AS [FirstName],
PersonLevel.value('(x1:LastName)[1]', 'nvarchar(64)') AS [LastName],
PersonLevel.value('(x1:Department)[1]', 'nvarchar(64)') AS [Department],
PersonLevel.value('(x1:CountryCode)[1]', 'nvarchar(64)') AS [CountryCode],
PersonLevel.value('(x1:CompanyName)[1]', 'nvarchar(64)') AS [CompanyName]
FROM @input.nodes('/Data/x1:Data/x1:Person') AS XT1(PersonLevel);
С другой стороны, вам действительно нужно, чтобы все было nvarchar(64)
? Я бы предположил, что 64 символов вполне может быть недостаточно для адреса электронной почты (я видел некоторые действительно глупые из них, когда у компаний длинные доменные имена, с поддоменами и полными именами), однако 64 символа Юникод это 62 символа для кода страны (который состоит из 2 символов ASCII). Вы, вероятно, хотите пересмотреть свои типы данных здесь.