Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL-databas i Microsoft Fabric
Uppdaterar värdet på en nod i dokumentet.
Syntax
replace value of Expression1
with Expression2
Arguments
Uttryck1
Identifierar en nod vars värde ska uppdateras. Den måste identifiera endast en enda nod. Det vill säga, Expression1 måste vara en statisk singel. Om XML:en är typad måste nodens typ vara en enkel typ. När flera noder väljs uppstår ett fel. Om Expression1 returnerar en tom sekvens sker ingen värdeersättning och inga fel returneras. Expression1 måste returnera ett enda element som har enkelt typinnehåll (list- eller atomtyp), en textnod eller en attributnod. Expression1 kan inte vara en uniontyp, en komplex typ, en bearbetningsinstruktion, en dokumentnod eller en kommentarnod, annars returneras ett fel.
Uttryck 2
Identifierar nodens nya värde. Det kan vara ett uttryck som returnerar en enkel typnod, eftersom data() används implicit. Om värdet är en lista med värden, update ersätter satsen det gamla värdet med listan. När du ändrar en typad XML-instans måste Expression2 vara samma typ eller en subtyp av Expression1. Annars returneras ett fel. När du modifierar en otypad XML-instans måste Expression2 vara ett uttryck som kan atomiseras. Annars returneras ett fel.
Examples
Kodexemplen i den här artikeln använder AdventureWorks2025- eller AdventureWorksDW2025-exempeldatabasen, som du kan ladda ned från startsidan Microsoft SQL Server Samples och Community Projects.
Följande exempel på XML DML-satsen replace value of illustrerar hur man uppdaterar noder i ett XML-dokument.
A. Byt ut värden i en XML-instans
I följande exempel tilldelas en dokumentinstans först en variabel av xml-typ . Sedan replace value of uppdaterar XML DML-satser värden i dokumentet.
DECLARE @myDoc XML;
SET @myDoc = '<Root>
<Location LocationID="10"
LaborHours="1.1"
MachineHours=".2" >Manufacturing steps are described here.
<step>Manufacturing step 1 at this work center</step>
<step>Manufacturing step 2 at this work center</step>
</Location>
</Root>';
SELECT @myDoc;
-- update text in the first manufacturing step
SET @myDoc.modify('
replace value of (/Root/Location/step[1]/text())[1]
with "new text describing the manu step"
');
SELECT @myDoc;
-- update attribute value
SET @myDoc.modify('
replace value of (/Root/Location/@LaborHours)[1]
with "100.0"
');
SELECT @myDoc;
Målet som uppdateras måste högst vara en nod som explicit anges i väguttrycket genom att lägga till en "[1]" i slutet av uttrycket.
B. Använd if-uttrycket för att bestämma ersättningsvärdet
Du kan ange uttrycket if i Expression2 av satsen replace value of , som visas i följande exempel. Expression1 identifierar attributet LaborHours från det första arbetscentret som ska uppdateras.
Expression2 använder ett if uttryck för att bestämma det nya värdet på LaborHours attributet.
DECLARE @myDoc XML;
SET @myDoc = '<Root>
<Location LocationID="10"
LaborHours=".1"
MachineHours=".2" >Manu steps are described here.
<step>Manufacturing step 1 at this work center</step>
<step>Manufacturing step 2 at this work center</step>
</Location>
</Root>';
--SELECT @myDoc
SET @myDoc.modify('
replace value of (/Root/Location[1]/@LaborHours)[1]
with (
if (count(/Root/Location[1]/step) > 3) then
"3.0"
else
"1.0"
)
');
SELECT @myDoc;
C. Uppdatera XML som lagras i en otypad XML-kolumn
Följande exempel uppdaterar XML som lagras i en kolumn:
DROP TABLE T;
GO
CREATE TABLE T (i INT, x XML);
GO
INSERT INTO T
VALUES (
1,
'<Root>
<ProductDescription ProductID="1" ProductName="Road Bike">
<Features>
<Warranty>1 year parts and labor</Warranty>
<Maintenance>3 year parts and labor extended maintenance is available</Maintenance>
</Features>
</ProductDescription>
</Root>'
);
GO
-- verify the current <ProductDescription> element
SELECT x.query(' /Root/ProductDescription')
FROM T;
-- update the ProductName attribute value
UPDATE T
SET x.modify('
replace value of (/Root/ProductDescription/@ProductName)[1]
with "New Road Bike" ');
-- verify the update
SELECT x.query(' /Root/ProductDescription');
FROM T
D. Uppdatera XML som lagras i en typad XML-kolumn
Detta exempel ersätter värden i ett tillverkningsinstruktionsdokument som lagrats i en typad XML-kolumn.
I exemplet skapar du först en tabell (T) med en typad XML-kolumn i databasen AdventureWorks2025 . Du kopierar sedan en tillverkningsinstruktions-XML-instans från kolumnen Instructions i ProductModel tabellen till tabellen T. Insättningar appliceras sedan på XML i tabellen T.
USE AdventureWorks2022;
GO
DROP TABLE T;
GO
CREATE TABLE T (
ProductModelID INT PRIMARY KEY,
Instructions XML(Production.ManuInstructionsSchemaCollection)
);
GO
INSERT T
SELECT ProductModelID, Instructions
FROM Production.ProductModel
WHERE ProductModelID = 7;
GO
--insert a new location - <Location 1000/>.
UPDATE T
SET Instructions.modify('
declare namespace MI="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";
insert <MI:Location LocationID="1000" LaborHours="1000" LotSize="1000" >
<MI:step>Do something using <MI:tool>hammer</MI:tool></MI:step>
</MI:Location>
as first
into (/MI:root)[1]
');
GO
SELECT Instructions
FROM T;
GO
-- Now replace manu. tool in location 1000
UPDATE T
SET Instructions.modify('
declare namespace MI="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";
replace value of (/MI:root/MI:Location/MI:step/MI:tool)[1]
with "screwdriver"
');
GO
SELECT Instructions
FROM T;
-- Now replace value of lot size
UPDATE T
SET Instructions.modify('
declare namespace MI="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";
replace value of (/MI:root/MI:Location/@LotSize)[1]
with 500 cast as xs:decimal ?
');
GO
SELECT Instructions
FROM T;
Detta exempel används cast när man ersätter LotSize värde.
cast krävs när värdet måste vara av en specifik typ. I detta exempel, om 500 är värdet, är explicit kastning inte nödvändig.