如何遍历给定的xml输入并将数据插入SQL Server中的TempTable?

时间:2015-08-25 15:17:04

标签: sql-server xml

您好我在SP中输入了以下xml。

DECLARE @XmlVariable XML = '<portal><patientid>67518</patientid> 
<forms>
<form id="31"  type="C"/>
<form id="44"  type="D"/>
</forms>
</portal>'

我有以下内存表:

DECLARE @TColumns table (
    FormId int,
    FormType varchar(1),
    PatientId int
  )

现在,我的意图是: 1.迭代xml并将值插入@TColumns表。 2.逐行读取@TColumns表 并根据3列值更新一些现有表;类似于 更新myexistingtable set status = 4其中Formid = 31&amp;&amp; Formtype =&#39; C&#39;和PatientId = 67518。

对于上面的第1项,这是我到目前为止所做的,但是有一些语法错误:

INSERT INTO @TColumns(FormId,FormType,PatientId)
  SELECT 
     XTbl.Cats.value('.', 'int'),
     XTbl.Cats.value('.', 'varchar(1)'),
     XTbl.Cats.value('.', 'int')
  FROM 
     @XmlVariable.nodes('/portal/forms/form/@id') AS XTbl(Cats),
     @XmlVariable.nodes('/portal/forms/form/@type') AS XTbl(Cats),
     @XmlVariable.nodes('/portal/forms/form/@patientid') AS XTbl(Cats)

我得到的错误是:相关名称&#39; XTbl&#39;在FROM子句中多次指定。 需要帮助,以及上面的第2项。 提前谢谢。

2 个答案:

答案 0 :(得分:0)

也许你想要这样的东西

 SELECT  
   Tbl1.Form.value('@id', 'int'),  
   Tbl1.Form.value('@type', 'varchar(1)'),  
   Tbl2.Portal.value('patientid', 'int')
FROM 
   @XmlVariable.nodes('//form') Tbl1(Form),
   @XmlVariable.nodes('//portal') Tbl2(Portal)

答案 1 :(得分:0)

这是有帮助的。是基于Hogan的最后一个建议。谢谢!

INSERT INTO @TColumns(FormId,FormType,PatientId)
 SELECT  
   Tbl1.Form.value('@id', 'int'),  
   Tbl1.Form.value('@type', 'varchar(1)'),  
   Tbl2.Portal.value('.', 'int')
FROM 
   @XmlVariable.nodes('//form') Tbl1(Form),
   @XmlVariable.nodes('//patientid') Tbl2(Portal)