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
Enligt beskrivningen i artikeln xml (Transact-SQL) tillhandahåller SQL Server intern lagring av XML-data via xml-datatypen . Du kan också associera XSD-scheman med en variabel eller en kolumn av XML-typ via en XML-schemasamling. XML-schemasamlingen lagrar de importerade XML-schemana och används sedan för att göra följande:
Verifiera XML-instanser
Skriv XML-data när de lagras i databasen
XML-schemasamlingen är en metadataentitet som en tabell i databasen. Du kan skapa, ändra och släppa dem. Scheman som anges i instruktionen CREATE XML SCHEMA COLLECTION (Transact-SQL) importeras automatiskt till det nyligen skapade XML-schemasamlingsobjektet. Du kan importera ytterligare scheman eller schemakomponenter till ett befintligt samlingsobjekt i databasen med hjälp av instruktionen ALTER XML SCHEMA COLLECTION (Transact-SQL).
Som beskrivs i artikeln Typed vs. Untyped XML kallas XML, som lagras i en kolumn eller variabel där ett schema är associerat, för typad XML eftersom schemat tillhandahåller nödvändig datatypinformation för instansdatan. SQL Server använder den här typen av information för att optimera datalagring.
Frågebearbetningsmotorn använder också schemat för typkontroll och för att optimera frågor och dataändringar.
Dessutom använder SQL Server den associerade XML-schemasamlingen, med skrivet XML, för att verifiera XML-instansen. Om XML-instansen uppfyller schemat tillåter databasen att instansen lagras i systemet med deras typinformation. Annars avvisas instansen.
Du kan använda den inbyggda funktionen XML_SCHEMA_NAMESPACE för att hämta schemasamlingen som lagras i databasen. Mer information finns i Visa en lagrad XML-schemasamling.
Du kan också använda XML-schemasamlingen för att skriva XML-variabler, parametrar och kolumner.
DDL för att hantera schemasamlingar
Du kan skapa XML-schemasamlingar i databasen och associera dem med variabler och kolumner av xml-typ . För att hantera schemasamlingar i databasen tillhandahåller SQL Server följande DDL-instruktioner:
SKAPA XML-SCHEMASAMLING (Transact-SQL) Importerar schemakomponenter till en databas.
ÄNDRA XML-SCHEMASAMLING (Transact-SQL) Ändrar schemakomponenterna i en befintlig XML-schemasamling.
TA BORT XML-SCHEMASAMLING (Transact-SQL) Tar bort en fullständig XML-schemasamling och alla dess komponenter.
Om du vill använda en XML-schemasamling och de scheman som den innehåller måste du först skapa samlingen och schemana med hjälp av INSTRUKTIONEN SKAPA XML-SCHEMASAMLING. När schemasamlingen har skapats kan du sedan skapa variabler och kolumner av xml-typ och associera schemasamlingen med dem. När en schemasamling har skapats lagras olika schemakomponenter i metadata. Du kan också använda ALTER XML SCHEMA COLLECTION för att lägga till fler komponenter i befintliga scheman eller lägga till nya scheman i en befintlig samling.
Om du vill släppa schemasamlingen använder du instruktionen DROP XML SCHEMA COLLECTION. Detta tar bort alla scheman som finns i samlingen och tar bort samlingsobjektet. Innan du kan ta bort en schemasamling måste villkoren som beskrivs i DROP XML SCHEMA COLLECTION (Transact-SQL) uppfyllas.
Förstå schemakomponenter
När du använder instruktionen CREATE XML SCHEMA COLLECTION importeras olika schemakomponenter till databasen. Schemakomponenter inkluderar schemaelement, attribut och typdefinitioner. När du använder instruktionen DROP XML SCHEMA COLLECTION tar du bort hela samlingen.
CREATE XML SCHEMA COLLECTION sparar schemakomponenterna i olika systemtabeller.
Tänk till exempel på följande schema:
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="uri:Cust_Orders2"
xmlns="uri:Cust_Orders2" >
<xsd:attribute name="SomeAttribute" type="xsd:int" />
<xsd:complexType name="SomeType" />
<xsd:complexType name="OrderType" >
<xsd:sequence>
<xsd:element name="OrderDate" type="xsd:date" />
<xsd:element name="RequiredDate" type="xsd:date" />
<xsd:element name="ShippedDate" type="xsd:date" />
</xsd:sequence>
<xsd:attribute name="OrderID" type="xsd:ID" />
<xsd:attribute name="CustomerID" />
<xsd:attribute name="EmployeeID" />
</xsd:complexType>
<xsd:complexType name="CustomerType" >
<xsd:sequence>
<xsd:element name="Order" type="OrderType"
maxOccurs="unbounded" />
</xsd:sequence>
<xsd:attribute name="CustomerID" type="xsd:string" />
<xsd:attribute name="OrderIDList" type="xsd:IDREFS" />
</xsd:complexType>
<xsd:element name="Customer" type="CustomerType" />
</xsd:schema>
Föregående schema visar de olika typer av komponenter som kan lagras i databasen. Dessa inkluderar SomeAttribute, SomeType, OrderType, CustomerType, Customer, Order, CustomerID, OrderID, OrderDate, , RequiredDateoch ShippedDate.
Komponentkategorier
Schemakomponenterna som lagras i databasen tillhör följande kategorier:
ELEMENT
ATTRIBUT
TYP (för enkla eller komplexa typer)
ATTRIBUTEGROUP
MODELLGRUPP
Till exempel:
SomeAttributeär en ATTRIBUTE-komponent.SomeType,OrderTypeochCustomerTypeär TYPE-komponenter.Customerär en ELEMENT-komponent.
När du importerar ett schema till databasen lagrar SQL Server inte själva schemat. I stället lagrar SQL Server de olika enskilda komponenterna. Det vill: Taggen <Schema> lagras inte, bara de komponenter som definieras i den bevaras. Alla schemaelement bevaras inte. Om taggen <Schema> innehåller attribut som anger standardbeteendet för dess komponenter, flyttas dessa attribut till schemakomponenterna i den under importprocessen, enligt följande tabell.
| Attributnamn | Beteende |
|---|---|
| attributeFormDefault | Attributet 'form' tillämpas på alla attributdeklarationer i schemat där det inte redan är angivet och värdet sätts till 'attributeFormDefault'-attributets värde. |
| elementFormDefault | Formulärattributet som tillämpas på alla elementdeklarationer i schemat där det inte redan finns och värdet är inställt på värdet för attributet elementFormDefault. |
| blockDefault | Blockattributet som tillämpas på alla elementdeklarationer och typdefinitioner om det inte redan finns, och vars värde är inställt till värdet för attributet blockDefault. |
| finalDefault | Det slutliga attributet som tillämpas på alla elementdeklarationer och typdefinitioner där det inte redan finns och värdet anges till värdet för attributet finalDefault . |
| targetNamespace | Information om de komponenter som tillhör målnamnområdet lagras i metadata. |
Behörigheter för en XML-schemasamling
Du måste ha de behörigheter som krävs för att göra följande:
Skapa/ladda in XML-schemasamlingen
Ändra XML-schemasamlingen
Ta bort XML-schemasamlingen
Använd XML-schemasamlingen för att skriva xml-typkolumner , variabler och parametrar, eller använda den i tabell- eller kolumnbegränsningar
SQL Server-säkerhetsmodellen tillåter KONTROLL-behörighet för varje objekt. Den som beviljas den här behörigheten får alla andra behörigheter för objektet. Objektets ägare har också alla behörigheter för objektet.
Ägaren och den som beviljar behörigheten CONTROL för ett objekt kan bevilja alla behörigheter för objektet. En användare som inte är ägare och inte har KONTROLL-behörighet kan fortfarande bevilja behörighet för ett objekt när GRANT OPTION har angetts. Anta till exempel att användare A har behörigheten REFERENSER för XML-schemasamlingen S, med rätten att bevilja, men inga andra behörigheter på S. Användare A kan ge REFERENSER-behörighet till Användare B för schemasamlingen S.
Säkerhetsmodellen tillåter också behörigheter att skapa och använda XML-schemasamlingar eller överföra ägarskap från en användare till en annan. I följande artiklar beskrivs behörigheterna för XML-schemasamlingen.
Bevilja behörigheter för en XML-schemasamling
I den här artikeln beskrivs hur du beviljar behörigheter för att skapa en XML-schemasamling och hur du beviljar behörigheter för ett XML-schemasamlingsobjekt.
Återkalla behörigheter för en XML-schemasamling
I den här artikeln beskrivs hur återkallande av behörigheter kan användas för att förhindra att en XML-schemasamling skapas och hur du återkallar behörigheter för ett XML-schemasamlingsobjekt.
Neka behörigheter för en XML-schemasamling
I den här artikeln beskrivs hur du nekar behörigheter för att skapa en XML-schemasamling och neka behörighet för ett XML-schemasamlingsobjekt.
Hämta information om XML-scheman och schemasamlingar
XML-schemasamlingar räknas upp i katalogvyn sys.xml_schema_collections. XML-schemasamlingen sys definieras av systemet. Den innehåller de fördefinierade namnrymder som kan användas i alla användardefinierade XML-schemasamlingar utan att behöva läsa in dem explicit. Den här listan innehåller namnrymderna för xml, xs, xsi, fnoch xdt. Två andra katalogvyer är sys.xml_schema_namespaces, som räknar upp alla namnområden i varje XML-schemasamling och sys.xml_components, som räknar upp alla XML-schemakomponenter i varje XML-schema.
Den inbyggda funktionen XML_SCHEMA_NAMESPACE, schemaName, XmlSchemacollectionName, namespace-uri, avkastar en XML-datatypinstans. Den här instansen innehåller XML-schemafragment för scheman som finns i en XML-schemasamling, förutom fördefinierade XML-scheman.
Du kan räkna upp innehållet i en XML-schemasamling på följande sätt:
Skriv Transact-SQL frågor om lämpliga katalogvyer för XML-schemasamlingar.
Använd den inbyggda funktionen
XML_SCHEMA_NAMESPACE(). Du kan använda xml-datatypsmetoder på utdata för den här funktionen. Du kan dock inte ändra de underliggande XML-schemana.
Dessa illustreras i följande exempel.
Examples
Räkna upp XML-namnområden i en XML-schemasamling
Använd följande fråga för XML-schemasamlingen myCollection:
SELECT XSN.name
FROM sys.xml_schema_collections XSC JOIN sys.xml_schema_namespaces XSN
ON (XSC.xml_collection_id = XSN.xml_collection_id)
WHERE XSC.name = 'myCollection';
Räkna upp innehållet i en XML-schemasamling
Följande instruktion räknar upp innehållet i XML-schemasamlingen myCollection i relationsschemat, dbo.
SELECT XML_SCHEMA_NAMESPACE (N'dbo', N'myCollection');
Enskilda XML-scheman i samlingen kan hämtas som xml-datatypinstanser genom att ange målnamnområdet som det tredje argumentet till XML_SCHEMA_NAMESPACE(). Detta visas i följande exempel.
Mata ut ett angivet schema från en XML-schemasamling
Följande instruktion genererar XML-schemat med det låtsade namnområdet pretend från XML-schemasamlingen myCollection i relationsschemat dbo.
SELECT XML_SCHEMA_NAMESPACE (N'dbo', N'myCollection',
N'https://www.microsoft.com/was-books')
Fråga XML-scheman
Du kan köra frågor mot XML-scheman som du har läst in i XML-schemasamlingar på följande sätt:
Skriv Transact-SQL frågor om katalogvyer för XML-schemanamnområden.
Skapa en tabell som innehåller en xml-datatypkolumn för att lagra dina XML-scheman och även läsa in dem i XML-typsystemet. Du kan köra frågor mot XML-kolumnen med hjälp av xml-datatypsmetoderna. Du kan också skapa ett XML-index i den här kolumnen. Med den här metoden måste programmet dock upprätthålla konsekvensen mellan XML-scheman som lagras i XML-kolumnen och XML-typsystemet. Om du till exempel släpper XML-schemanamnområdet från XML-typsystemet måste du också ta bort det från tabellen för att bevara konsekvensen.