您好我在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项。 提前谢谢。
答案 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)