Hi @Gani_tpt ,
It is much easier to pass XML in its entirety as a parameter to a stored procedure, and shred it there via XQuery.
Check it out below.
SQL
DECLARE @tbl_Employee TABLE (
EmpId VARCHAR(20),
EmpJoined VARCHAR(20),
EmpRetired VARCHAR(20),
EmpAttr1 VARCHAR(50),
EmpAttr2 VARCHAR(50),
EmpAttr3 VARCHAR(50),
Category VARCHAR(50),
CurrentStatus VARCHAR(50),
DateRelieved DATE
);
DECLARE @parameter XML =
N'<RecSearch ValSize="175" CPage="1">
<SearchRes>
<Employee EmpId="473873627637">
<EmpJoined></EmpJoined>
<EmpRetired>No</EmpRetired>
<EmpAttr1>
<AttriNames>
<AttriName>EMP-NOTEDLIST</AttriName>
</AttriNames>
<AttriType>ATTRI1</AttriType>
</EmpAttr1>
<EmpAttr2>
<AttriNames>
<AttriName>EMP-REQUIREDLIST</AttriName>
</AttriNames>
<AttriType>ATTRI2</AttriType>
</EmpAttr2>
<EmpAttr3>
<AttriNames>
<AttriName>EMP-RESIGNEDLIST</AttriName>
</AttriNames>
<AttriType>ATTRI3</AttriType>
</EmpAttr3>
<Category></Category>
<CurrentStatus>true</CurrentStatus>
<DateRelieved>2018-08-20T23:00:00.000Z</DateRelieved>
</Employee>
</SearchRes>
</RecSearch>';
INSERT INTO @tbl_Employee
(
EmpId,
EmpJoined,
EmpRetired,
EmpAttr1,
EmpAttr2,
EmpAttr3,
Category,
CurrentStatus,
DateRelieved
)
SELECT c.value('@EmpId', 'VARCHAR(20)') AS EmpId
, c.value('(EmpJoined/text())[1]', 'VARCHAR(20)') AS EmpJoined
, c.value('(EmpRetired/text())[1]', 'VARCHAR(20)') AS EmpRetired
, c.value('(EmpAttr1/AttriNames/AttriName/text())[1]', 'VARCHAR(50)') AS EmpAttr1
, c.value('(EmpAttr2/AttriNames/AttriName/text())[1]', 'VARCHAR(50)') AS EmpAttr2
, c.value('(EmpAttr3/AttriNames/AttriName/text())[1]', 'VARCHAR(50)') AS EmpAttr3
, c.value('(Category/text())[1]', 'VARCHAR(50)') AS Category
, c.value('(CurrentStatus/text())[1]', 'VARCHAR(50)') AS CurrentStatus
, c.value('(DateRelieved/text())[1]', 'DATE') AS DateRelieved
FROM @parameter.nodes('/RecSearch/SearchRes/Employee') AS t(c);
-- test
SELECT * FROM @tbl_Employee;