Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL databáze v Microsoft Fabric
Maže uzly z XML instance.
Syntaxe
delete Expression
Arguments
Výraz
Je XQuery výraz identifikující uzly, které mají být smazány. Všechny uzly vybrané výrazem, stejně jako všechny uzly nebo hodnoty obsažené ve vybraných uzlech, jsou smazány. Jak je popsáno v insertu (XML DML), musí se jednat o odkaz na existující uzel v dokumentu. Nemůže to být konstruovaný uzel. Výraz nemůže být kořenovým uzlem (/). Pokud výraz vrátí prázdnou sekvenci, nedochází ke smazání a chyby se nevrátí.
Examples
A. Mazání uzlů z dokumentu uloženého v netypované xml proměnné
Následující příklad ukazuje, jak smazat různé uzly z dokumentu. Nejprve je XML instance přiřazena proměnné typu xml . Následně příkazy delete XML DML odstraní různé uzly z dokumentu.
DECLARE @myDoc XML
SET @myDoc = '<?Instructions for=TheWC.exe ?>
<Root>
<!-- instructions for the 1st work center -->
<Location LocationID="10"
LaborHours="1.1"
MachineHours=".2" >Some text 1
<step>Manufacturing step 1 at this work center</step>
<step>Manufacturing step 2 at this work center</step>
</Location>
</Root>'
SELECT @myDoc
-- delete an attribute
SET @myDoc.modify('
delete /Root/Location/@MachineHours
')
SELECT @myDoc
-- delete an element
SET @myDoc.modify('
delete /Root/Location/step[2]
')
SELECT @myDoc
-- delete text node (in <Location>
SET @myDoc.modify('
delete /Root/Location/text()
')
SELECT @myDoc
-- delete all processing instructions
SET @myDoc.modify('
delete //processing-instruction()
')
SELECT @myDoc
B. Mazání uzlů z dokumentu uloženého v netypovaném sloupci xml
V následujícím příkladu příkaz delete XML DML odstraní druhý podprvek z <Features> dokumentu uloženého ve sloupci.
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 contents before delete
SELECT x.query(' //ProductDescription/Features')
FROM T
-- delete the second feature
UPDATE T
SET x.modify('delete /Root/ProductDescription/Features/*[2]')
-- verify the deletion
SELECT x.query(' //ProductDescription/Features')
FROM T
Všimněte si následujících věcí z předchozího dotazu:
Metoda modifikace() (xml datový typ) se používá k určení klíčového slova delete XML DML.
K dotazování dokumentu se používá metoda query() (xml datový typ).
C. Mazání uzlů z typovaného sloupce XML
Tento příklad maže uzly z XML dokumentu výrobních instrukcí uložených ve sloupci napsaném xml .
V příkladu nejprve vytvoříte tabulku (T) s napsaným sloupcem xml v databázi AdventureWorks. Poté zkopírujete XML instanci výrobních instrukcí ze sloupce Instrukce v tabulce ProductModel do tabulky T a smažete jeden nebo více uzlů z dokumentu.
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
SELECT Instructions
FROM T
--1) insert <Location 1000/>. Note: <Root> must be singleton in the query
UPDATE T
SET Instructions.modify('
DECLARE namespace MI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";
INSERT <MI:Location LocationID="1000" LaborHours="1000" >
These are manu steps at location 1000.
<MI:step>New step1 instructions</MI:step>
Instructions for step 2 are here
<MI:step>New step 2 instructions</MI:step>
</MI:Location>
AS first
INTO (/MI:root)[1]
')
GO
SELECT Instructions
FROM T
-- delete an attribute
UPDATE T
SET Instructions.modify('
declare namespace MI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";
delete(/MI:root/MI:Location[@LocationID=1000]/@LaborHours)
')
GO
SELECT Instructions
FROM T
-- delete text in <location>
UPDATE T
SET Instructions.modify('
declare namespace MI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";
delete(/MI:root/MI:Location[@LocationID=1000]/text())
')
GO
SET Instructions
FROM T
-- delete 2nd manu step at location 1000
UPDATE T
SET Instructions.modify('
declare namespace MI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";
delete(/MI:root/MI:Location[@LocationID=1000]/MI:step[2])
')
GO
SELECT Instructions
FROM T
-- cleanup
DROP TABLE T
GO
Viz také
Porovnání typovaného XML s nezatypovaným XML
Vytvoření instancí dat XML
metody datového typu XML
Jazyk pro úpravu dat XML (XML DML)