.query हमेशा डेटा प्रकार XML लौटाएगा।
किसी मान को क्वेरी करने के लिए आपको ".value" का उपयोग करना चाहिए, और डेटा प्रकार को दूसरे पैरामीटर के रूप में निर्दिष्ट करना चाहिए।
इसके बजाय इसका इस्तेमाल करें:
declare @xmlobj as xml = '<SimpleUserData xmlns="http://schemas.datacontract.org/2004/07/MyProject.CustomFx.Web" xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/" z:Id="1" z:Type="MyProject.CustomFx.Web.SimpleUserData" z:Assembly="MyProject.CustomFx.Web, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null">
<BatchDescription z:Id="2">I want this value</BatchDescription>
<BatchID>9c437c08-0f28-4c77-9a50-49a7a4e8930a</BatchID>
<BatchTemplateID>And this value too</BatchTemplateID>
</SimpleUserData>';
WITH XMLNAMESPACES('http://schemas.datacontract.org/2004/07/MyProject.CustomFx.Web' as x)
select
@xmlobj.value('(/x:SimpleUserData[1]/x:BatchDescription[1])','nvarchar(max)') as value1
,@xmlobj.value('(/x:SimpleUserData[1]/x:BatchTemplateID[1])','nvarchar(max)') as value2;