使用 XML 数据进行字符串操作需要格外小心。
考虑以下(记住这是我的蜥蜴脑方法)
Declare @KeyNode varchar(100)='tminus1'
Declare @NewValue varchar(100)='data here'
Declare @YourTable table (ID int,XMLData xml)
Insert Into @YourTable values
(1,'<Parameters><Parameter><VariableID>(1012,14505)</VariableID><VariableName>ArtworkFormat</VariableName><ListID>(1042,1601)</ListID><ListValue>0</ListValue><ValueAsString /></Parameter><Parameter><VariableID>(2226,14505)</VariableID><VariableName>ArtworkProofType</VariableName><ListID>(1045,1601)</ListID><ListValue>0</ListValue><ValueAsString /></Parameter><Parameter><VariableID>(2224,14505)</VariableID><VariableName>ArtworkReceivedVia</VariableName><ListID>(1043,1601)</ListID><ListValue>0</ListValue><ValueAsString /></Parameter><Parameter><VariableID>(2225,14505)</VariableID><VariableName>ArtworkReturnVia</VariableName><ListID>(1044,1601)</ListID><ListValue>0</ListValue><ValueAsString /></Parameter><Parameter><VariableID>(10306,14505)</VariableID><VariableName>tminus1</VariableName><ValueAsString>10/12/2016 4:00 PM</ValueAsString></Parameter><Parameter><VariableID>(10308,14505)</VariableID><VariableName>tminus3</VariableName><ValueAsString>10/10/2016 4:00 PM</ValueAsString></Parameter><Parameter><VariableID>(10307,14505)</VariableID><VariableName>tminus2</VariableName><ValueAsString>10/11/2016 4:00 PM</ValueAsString></Parameter></Parameters>')
Update @YourTable
Set XMLData = (Select (Select U.VariableID
,U.VariableName
,U.ListID
,U.ListValue
,ValueAsString = case when U.VariableName=@KeyNode then @NewValue else U.ValueAsString end
From ( Select VariableID = B.value('VariableID[1]' ,'varchar(max)')
,VariableName = B.value('VariableName[1]' ,'varchar(max)')
,ListID = B.value('ListID[1]' ,'varchar(max)')
,ListValue = B.value('ListValue[1]' ,'varchar(max)')
,ValueAsString= B.value('ValueAsString[1]','varchar(max)')
From XMLData.nodes('/Parameters') AS A (Lvl1)
Cross Apply A.Lvl1.nodes('Parameter')AS B(B)
) U
For XML Path('Parameter'),Type
) For XML Path ('Parameters'),Type
)
From @YourTable
Select * from @YourTable
更新 XML 是
<Parameters>
<Parameter>
<VariableID>(1012,14505)</VariableID>
<VariableName>ArtworkFormat</VariableName>
<ListID>(1042,1601)</ListID>
<ListValue>0</ListValue>
<ValueAsString></ValueAsString>
</Parameter>
<Parameter>
<VariableID>(2226,14505)</VariableID>
<VariableName>ArtworkProofType</VariableName>
<ListID>(1045,1601)</ListID>
<ListValue>0</ListValue>
<ValueAsString></ValueAsString>
</Parameter>
<Parameter>
<VariableID>(2224,14505)</VariableID>
<VariableName>ArtworkReceivedVia</VariableName>
<ListID>(1043,1601)</ListID>
<ListValue>0</ListValue>
<ValueAsString></ValueAsString>
</Parameter>
<Parameter>
<VariableID>(2225,14505)</VariableID>
<VariableName>ArtworkReturnVia</VariableName>
<ListID>(1044,1601)</ListID>
<ListValue>0</ListValue>
<ValueAsString></ValueAsString>
</Parameter>
<Parameter>
<VariableID>(10306,14505)</VariableID>
<VariableName>tminus1</VariableName> --<< Key Value
<ValueAsString>data here</ValueAsString> --<< Updated Value
</Parameter>
<Parameter>
<VariableID>(10308,14505)</VariableID>
<VariableName>tminus3</VariableName>
<ValueAsString>10/10/2016 4:00 PM</ValueAsString>
</Parameter>
<Parameter>
<VariableID>(10307,14505)</VariableID>
<VariableName>tminus2</VariableName>
<ValueAsString>10/11/2016 4:00 PM</ValueAsString>
</Parameter>
</Parameters>