Итак, у вас есть сохраненный процесс, который принимает VARCHAR? ОК, как-то так будет работать:
ALTER PROCEDURE dbo.YourProcedure(@data VARCHAR(2000))
AS BEGIN
DECLARE @XmlContent XML
SET @XmlContent = CAST(@data AS XML)
INSERT INTO dbo.YourTable(DocumentGUID, GraderFYC, Cnumber, Rank)
SELECT
@XmlContent.value('(/DocumentCriteria/Document/@documentGUID)[1]', 'Varchar(50)'),
@XmlContent.value('(/DocumentCriteria/Document/@graderFYC)[1]', 'int'),
Doc.Crit.value('(@cnumber)[1]', 'int') AS 'CNumber',
Doc.Crit.value('(@rank)[1]', 'int') AS 'Rank'
FROM
@XmlContent.nodes('/DocumentCriteria/Document/criterion') AS Doc(Crit)
END
Это выбирает DocumentGUID
и GraderFYC
из вашего единственного тега <Document>
, а затем выполняет итерацию по всем содержащим <criterion>
узлам, чтобы получить остальные данные.