SQL Server 2005 XML в таблицу - PullRequest
       4

SQL Server 2005 XML в таблицу

1 голос
/ 04 августа 2010

Я использую классический asp и передаю varchar (тип данных ado) в столбец данных xml в proc.

XML выглядит следующим образом:

<DocumentCriteria> 
   <Document documentGUID="{B49654E7-9AF2-4B89-AF8F-5146F7CD4911}" graderFYC="5907"> 
      <criterion cnumber="1" rank="3"/>
      <criterion cnumber="3" rank="3"/>
   </Document>
</DocumentCriteria>'

Я хотел бы иметь таблицу, которая выглядит следующим образом:

DocumentGUID|GraderFYC|Cnumber|Rank
{guid}      | 5907    | 1     | 3
{guid}      | 5907    | 3     | 3

Как я могу сделать это в рамках процедуры? Тип adVarchar хорошо в соединении ADO?

1 Ответ

3 голосов
/ 04 августа 2010

Итак, у вас есть сохраненный процесс, который принимает 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> узлам, чтобы получить остальные данные.

...