Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Managed Instance
Dodaje nowe komponenty schematu do istniejącej kolekcji schematów XML.
Transact-SQL konwencje składni
Syntax
ALTER XML SCHEMA COLLECTION [ relational_schema. ]sql_identifier ADD 'Schema Component'
Arguments
relational_schema
Identyfikuje nazwę schematu relacyjnego. Jeśli nie zostanie określony, przyjmuje się domyślny schemat relacyjny.
sql_identifier
Jest identyfikatorem SQL dla kolekcji schematów XML.
'Komponent schematu'
To komponent schematu do wstawienia.
Remarks
Użyj ich ALTER XML SCHEMA COLLECTION do dodania nowych schematów XML, których przestrzenie nazw nie znajdują się jeszcze w kolekcji schematów XML, lub do dodawania nowych komponentów do istniejących przestrzeni nazw w kolekcji.
Poniższy przykład dodaje nowy <element> do istniejącej przestrzeni https://MySchema/test_xml_schema nazw w kolekcji 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 dodaje element <anotherElement> do wcześniej zdefiniowanej przestrzeni https://MySchema/test_xml_schemanazw .
Należy zauważyć, że jeśli niektóre komponenty, które chcesz dodać do kolekcji, odnoszą się do komponentów, które już znajdują się w tej samej kolekcji, musisz użyć <import namespace="referenced_component_namespace" />. Jednak nie jest prawidłowe użycie aktualnej przestrzeni nazw schematu w <xsd:import>, dlatego komponenty z tej samej docelowej przestrzeni nazw co aktualna przestrzeń nazw schematu są automatycznie importowane.
Aby usunąć kolekcje, użyj DROP XML SCHEMA COLLECTION (Transact-SQL).
Jeśli kolekcja schematów zawiera już wolną walidację lub element typu xs:anyType, dodanie nowego globalnego elementu, typu lub deklaracji atrybutów do kolekcji schematów spowoduje ponowną walidację wszystkich przechowywanych danych ograniczonych przez kolekcję schematów.
Permissions
Aby zmienić i zmodyfikować, XML SCHEMA COLLECTION potrzebna jest zgoda ALTER na kolekcję.
Examples
A. Tworzenie kolekcji schematów XML w bazie danych
Poniższy przykład tworzy kolekcję ManuInstructionsSchemaCollectionschematów XML . Kolekcja ma tylko jedną przestrzeń nazw schematu.
-- 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;
Alternatywnie możesz przypisać kolekcję schematów do zmiennej i określić zmienną w instrukcji CREATE XML SCHEMA COLLECTION w następujący sposób:
DECLARE @MySchemaCollection nvarchar(max);
SET @MySchemaCollection = N' copy the schema collection here';
CREATE XML SCHEMA COLLECTION AS @MySchemaCollection;
Zmienna w przykładzie jest nvarchar(max) typu. Zmienna może również mieć typ danych xml , w takim przypadku jest niejawnie konwertowana na ciąg znaków.
Aby uzyskać więcej informacji, zobacz Wyświetlanie przechowywanej kolekcji schematów XML.
Możesz przechowywać kolekcje schematów w kolumnie typu xml . W tym przypadku, aby utworzyć kolekcję schematów XML, wykonaj następujące kroki:
Pobierz kolekcję schematów z kolumny za pomocą instrukcji SELECT i przypisz ją do zmiennej typu xml lub typu varchar .
Określ nazwę zmiennej w instrukcji CREATE XML SCHEMA COLLECTION .
Przechowuje CREATE XML SCHEMA COLLECTION tylko te komponenty schematu, które rozumie SQL Server; wszystko w schemacie XML nie jest przechowywane w bazie danych. Dlatego jeśli chcesz, aby kolekcja schematów XML wróciła dokładnie w taki sposób, w jakim została dostarczona, zalecamy zapisanie schematów XML w kolumnie bazy danych lub innym folderze na komputerze.
B. Określanie wielu przestrzeni nazw schematów w zbiorze schematów
Podczas tworzenia kolekcji schematów XML można określić wiele schematów XML. Przykład:
CREATE XML SCHEMA COLLECTION N'
<xsd:schema>....</xsd:schema>
<xsd:schema>...</xsd:schema>';
Poniższy przykład tworzy kolekcję ProductDescriptionSchemaCollection schematów XML zawierającą dwie przestrzenie nazw schematu XML.
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. Importowanie schematu, który nie określa docelowej przestrzeni nazw
Jeśli schemat niezawierający atrybutu docelowej przestrzeni nazw zostanie zaimportowany do kolekcji, jego komponenty są powiązane z pustą przestrzenią nazw docelowych ciągów znaków, jak pokazano w poniższym przykładzie. Należy zauważyć, że brak powiązania jednego lub więcej schematów importowanych w kolekcji skutkuje powiązaniem wielu komponentów schematu (potencjalnie niepowiązanych) z domyślną pustą przestrzenią nazw ciągów znaków.
-- 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='';
Zobacz też
CREATE XML SCHEMA COLLECTION (Transact-SQL)
DROP XML SCHEMA COLLECTION (Transact-SQL)
DANE ZDARZEŃ (Transact-SQL)
Porównaj typizowane XML z nietypizowanym XML
Wymagania i ograniczenia dotyczące kolekcji schematów XML na serwerze