我有以下代码来更新MIITEM中的记录工作正常,但我怎样才能使用另一个名为[WI]动态的表中的数据
use DB1;
Go
update MIITEM
set [fldXml]= '<fields>
<field5>USE DISC:300230 FORMED OD:13.48 BH SPEC:8/8/6.003, BH Size: 0.656, C/S Spec: 90/0.843/CONICAL 2</field5>
<field6>1 - CL THRU PLATE-V/S HOLE SIZE:5/8"Z1 V:0.125 L:0.125 COLOR:100270 AGC REVERSE DISC</field6>
<field7>N/A</field7>
</fields>'
where [itemId]='500201'
这里的数据看起来像源表
以下是应用程序中的数据
中的记录我想用动态[WI]表中的[wi]。[DISC_NOTE]字段中的值替换文本
USE DISC:300230 FORMED OD:13.48 BH SPEC:8/8/6.003, BH Size: 0.656, C/S Spec: 90/0.843/CONICAL 2
我想动态地用值[wi]。[WHEEL_NOTE]字段替换
1 - CL THRU PLATE-V/S HOLE SIZE:5/8"Z1 V:0.125 L:0.125 COLOR:100270 AGC REVERSE DISC
我想从[WI]表中替换
N/A
[wi]。[ASSEMBLY_NOTE]字段。在动态字段之间进行
答案 0 :(得分:3)
您可以将TSQL XML DML用于此目的(假设fldXml
为xml
数据类型)。查询看起来像这样。
update MIITEM
set [fldXml].modify('replace value of (fields/field5)[1]
with sql:column("DISC_NOTE")')
from MIITEM m
inner join wi on m.idemid=wi.stock_id
--where m.idemid='500201' --if you need it
请注意,您必须运行update
trice(对于每个field5,field6和field7分别运行),因为XML DML不允许多节点更新。
如果fldXml
是一个字符串,那么您需要比较构建整个字符串
fldXml='<fields><field5>'+wi.disc_note+...
并创建临时表。
declare @MIITEM table (itemid int, fldXml xml)
insert @MIITEM (itemid, fldXml)
from MIITEM
--where... if you need
然后根据初始答案多次为每个节点更新@MIITEM
,最后
update MIITEM
set [fldXml]=x.fldXml
from MIITEM t
inner join @MIITEM x on t.itemid = x.itemid