Kommentar
Å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 Managed Instance
Lägger till nya schemakomponenter till en befintlig XML-schemasamling.
Transact-SQL syntaxkonventioner
Syntax
ALTER XML SCHEMA COLLECTION [ relational_schema. ]sql_identifier ADD 'Schema Component'
Arguments
relational_schema
Identifierar namnet på relationsschemat. Om det inte anges antas standardrelationsschemat.
sql_identifier
Är SQL-identifieraren för XML-schemasamlingen.
'Schemakomponent'
Är schemakomponenten som ska infogas.
Remarks
Använd för ALTER XML SCHEMA COLLECTION att lägga till nya XML-scheman vars namnrymder inte redan finns i XML-schemasamlingen, eller lägg till nya komponenter i befintliga namnrymder i samlingen.
Följande exempel lägger till ett nytt <element> i det befintliga namnrymden https://MySchema/test_xml_schema i samlingen MyColl.
-- First create an XML schema collection.
CREATE XML SCHEMA COLLECTION MyColl AS '
<schema
xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="https://MySchema/test_xml_schema">
<element name="root" type="string"/>
</schema>'
-- Modify the collection.
ALTER XML SCHEMA COLLECTION MyColl ADD '
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="https://MySchema/test_xml_schema">
<element name="anotherElement" type="byte"/>
</schema>';
ALTER XML SCHEMA lägger till element <anotherElement> i det tidigare definierade namnrymden https://MySchema/test_xml_schema.
Observera att om några av de komponenter du vill lägga till i samlingen refererar till komponenter som redan finns i samma samling, måste du använda <import namespace="referenced_component_namespace" />. Det är dock inte giltigt att använda det aktuella schemanamnrymden i <xsd:import>, och därför importeras komponenter från samma målnamnrymd som det aktuella schemanamnrymden automatiskt.
För att ta bort samlingar, använd DROP XML SCHEMA COLLECTION (Transact-SQL).
Om schemasamlingen redan innehåller ett slappt valideringsjokerkort eller ett element av typen xs:anyType, kommer tillägg av en ny global element-, typ- eller attributdeklaration till schemasamlingen att orsaka en omvalidering av all lagrad data som är begränsad av schemasamlingen.
Permissions
För att ändra en XML SCHEMA COLLECTION kräver ALTER-tillstånd på samlingen.
Examples
A. Skapa XML-schemasamling i databasen
I följande exempel skapas XML-schemasamlingen ManuInstructionsSchemaCollection. Samlingen har bara ett schemanamnområde.
-- Create a sample database in which to load the XML schema collection.
CREATE DATABASE SampleDB;
GO
USE SampleDB;
GO
CREATE XML SCHEMA COLLECTION ManuInstructionsSchemaCollection AS
N'<?xml version="1.0" encoding="UTF-16"?>
<xsd:schema targetNamespace="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions"
xmlns ="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions"
elementFormDefault="qualified"
attributeFormDefault="unqualified"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" >
<xsd:complexType name="StepType" mixed="true" >
<xsd:choice minOccurs="0" maxOccurs="unbounded" >
<xsd:element name="tool" type="xsd:string" />
<xsd:element name="material" type="xsd:string" />
<xsd:element name="blueprint" type="xsd:string" />
<xsd:element name="specs" type="xsd:string" />
<xsd:element name="diag" type="xsd:string" />
</xsd:choice>
</xsd:complexType>
<xsd:element name="root">
<xsd:complexType mixed="true">
<xsd:sequence>
<xsd:element name="Location" minOccurs="1" maxOccurs="unbounded">
<xsd:complexType mixed="true">
<xsd:sequence>
<xsd:element name="step" type="StepType" minOccurs="1" maxOccurs="unbounded" />
</xsd:sequence>
<xsd:attribute name="LocationID" type="xsd:integer" use="required"/>
<xsd:attribute name="SetupHours" type="xsd:decimal" use="optional"/>
<xsd:attribute name="MachineHours" type="xsd:decimal" use="optional"/>
<xsd:attribute name="LaborHours" type="xsd:decimal" use="optional"/>
<xsd:attribute name="LotSize" type="xsd:decimal" use="optional"/>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>' ;
GO
-- Verify - list of collections in the database.
SELECT *
FROM sys.xml_schema_collections;
-- Verify - list of namespaces in the database.
SELECT name
FROM sys.xml_schema_namespaces;
-- Use it. Create a typed xml variable. Note the collection name
-- that is specified.
DECLARE @x xml (ManuInstructionsSchemaCollection);
GO
--Or create a typed xml column.
CREATE TABLE T (
i int primary key,
x xml (ManuInstructionsSchemaCollection));
GO
-- Clean up.
DROP TABLE T;
GO
DROP XML SCHEMA COLLECTION ManuInstructionsSchemaCollection;
Go
USE master;
GO
DROP DATABASE SampleDB;
Du kan också tilldela schemasamlingen till en variabel och ange variabeln i -instruktionen CREATE XML SCHEMA COLLECTION på följande sätt:
DECLARE @MySchemaCollection nvarchar(max);
SET @MySchemaCollection = N' copy the schema collection here';
CREATE XML SCHEMA COLLECTION AS @MySchemaCollection;
Variabeln i exemplet är av nvarchar(max) typen . Variabeln kan också vara av xml-datatyp , i vilket fall den implicit konverteras till en sträng.
Mer information finns i Visa en lagrad XML-schemasamling.
Du kan lagra schema-samlingar i en xml-typkolumn . I det här fallet utför du följande steg för att skapa XML-schemasamling:
Hämta schemasamlingen från kolumnen med en SELECT-sats och tilldela den en variabel av xml-typ eller varchar-typ .
Ange variabelnamnet i -instruktionen CREATE XML SCHEMA COLLECTION .
Den CREATE XML SCHEMA COLLECTION lagrar endast de schemakomponenter som SQL Server förstår; allt i XML-schemat lagras inte i databasen. Därför, om du vill ha XML-schemasamlingen tillbaka exakt som den levererades, rekommenderar vi att du sparar dina XML-scheman i en databaskolumn eller någon annan mapp på din dator.
B. Specificering av flera schemanamnrymder i en schemasamling
Du kan ange flera XML-scheman när du skapar en XML-schemasamling. Ett exempel:
CREATE XML SCHEMA COLLECTION N'
<xsd:schema>....</xsd:schema>
<xsd:schema>...</xsd:schema>';
I följande exempel skapas XML-schemasamlingen ProductDescriptionSchemaCollection som innehåller två XML-schemanamnområden.
CREATE XML SCHEMA COLLECTION ProductDescriptionSchemaCollection AS
'<xsd:schema targetNamespace="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain"
xmlns="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain"
elementFormDefault="qualified"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" >
<xsd:element name="Warranty" >
<xsd:complexType>
<xsd:sequence>
<xsd:element name="WarrantyPeriod" type="xsd:string" />
<xsd:element name="Description" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<xs:schema targetNamespace="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription"
xmlns="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription"
elementFormDefault="qualified"
xmlns:mstns="https://tempuri.org/XMLSchema.xsd"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:wm="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain" >
<xs:import
namespace="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain" />
<xs:element name="ProductDescription" type="ProductDescription" />
<xs:complexType name="ProductDescription">
<xs:sequence>
<xs:element name="Summary" type="Summary" minOccurs="0" />
</xs:sequence>
<xs:attribute name="ProductModelID" type="xs:string" />
<xs:attribute name="ProductModelName" type="xs:string" />
</xs:complexType>
<xs:complexType name="Summary" mixed="true" >
<xs:sequence>
<xs:any processContents="skip" namespace="http://www.w3.org/1999/xhtml" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:schema>'
;
GO
-- Clean up
DROP XML SCHEMA COLLECTION ProductDescriptionSchemaCollection;
GO
C. Importera ett schema som inte specificerar ett målnamnrymd
Om ett schema som inte innehåller ett targetNamespace-attribut importeras i en samling, kopplas dess komponenter till det tomma målnamnrymden för strängen som visas i följande exempel. Observera att om man inte associerar ett eller flera scheman importerade i samlingen så kopplas flera schemakomponenter (potentiellt orelaterade) till standardnamnrymden för tomma strängar.
-- Create a collection that contains a schema with no target namespace.
CREATE XML SCHEMA COLLECTION MySampleCollection AS '
<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:ns="http://ns">
<element name="e" type="dateTime"/>
</schema>';
GO
-- query will return the names of all the collections that
--contain a schema with no target namespace
SELECT sys.xml_schema_collections.name
FROM sys.xml_schema_collections
JOIN sys.xml_schema_namespaces
ON sys.xml_schema_collections.xml_collection_id =
sys.xml_schema_namespaces.xml_collection_id
WHERE sys.xml_schema_namespaces.name='';
Se även
CREATE XML SCHEMA COLLECTION (Transact-SQL)
DROP XML SCHEMA COLLECTION (Transact-SQL)
EVENTDATA (Transact-SQL)
Jämför typerad XML med otypad XML
Krav och begränsningar för XML-schemasamlingar på servern