我有一个SQL Server表(myTable1
),其中包含chtml
类型的列(ntext
)。
该列将数据存储为XML文本:
<root>
<StartOne>
<Value1>Michael, John MD</Value1>
<Value2>English</Value2>
<Value3>6900 Ocean Avenue</Value3>
<Value4>908-783-0909</Value4>
<Value5>IM</Value5>
</StartOne>
</root>
我可以使用以下内容查询表:
select
CONVERT(nvarchar(600), CAST ([chtml] as XML).query('/root/StartOne/Value2')) AS [Value5]
from
[myTable1]
我有一个临时表,其中包含Value1
的数据行,这两个表都是唯一值。
临时表(StageTable
):
Value1 Value2 Value3 Value4 Value5
--------------------------------------------------------------------------
Michael, Jogn MD Spanish 6900 Ocean Avenue 734-090-1234 NULL
如何编写一个查询来更新临时表中myTable1
表中的每个节点。
如果Value2
中的myTable1
字段与Value2
字段相匹配,我在StageTable
Value2
字段StageTable
中尝试了以下Value1
字段myTable1
)中的UPDATE
myTable1
SET
myTable1.(CAST ([chtml] as XML).query('/root/StartOne/Value2')) = ST.Value2
FROM
myTable1 MT
INNER JOIN
StageTable ST ON MT.(CAST ([chtml] as XML).query('/root/StartOne/Value1')) = ST.Value1
值:
#image {
opacity: 0.5;
}
#container {
background-color: black;
display: table;
}
我收到以下错误:
CAST&#39;附近的语法不正确。
如何解决问题。
答案 0 :(得分:2)
这是我们如何更新XML的代码
DECLARE @myDoc xml;
SET @myDoc = '<root>
<StartOne>
<Value1>Michael, John MD</Value1>
<Value2>English</Value2>
<Value3>6900 Ocean Avenue</Value3>
<Value4>908-783-0909</Value4>
<Value5>IM</Value5>
</StartOne>
</root>';
SELECT @myDoc;
-- update text
SET @myDoc.modify('
replace value of (/root/StartOne/Value1/text())[1]
with "new text "
');
SELECT @myDoc;
更新:如果列数据类型为NTEXT
declare @temp table
(
xmls ntext
)
insert into @temp values (N'<root>
<StartOne>
<Value1>Michael, John MD</Value1>
<Value2>English</Value2>
<Value3>6900 Ocean Avenue</Value3>
<Value4>908-783-0909</Value4>
<Value5>IM</Value5>
</StartOne>
</root>');
declare @xml xml;
-- here we can put where clause OR loop
select @xml = cast(xmls as xml)
from @temp
set @xml.modify('
replace value of (/root/StartOne/Value1/text())[1]
with "new text "
');
update @temp
set xmls = cast(@xml as nvarchar(max))
select * from @temp