Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:SQL Server
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Microsoft Fabric'te SQL veritabanı
Şema bileşenlerini veritabanına aktarır.
Transact-SQL söz dizimi kuralları
Sözdizimi
CREATE XML SCHEMA COLLECTION [ <relational_schema>. ] sql_identifier AS Expression
Arguments
relational_schema
İlişkisel şema adını tanımlar. Belirtilmezse, varsayılan ilişkisel şema varsayılır.
sql_identifier
XML şema koleksiyonu için SQL tanımlayıcısı.
İfade
Dize sabiti veya skaler değişken. Varchar, varbinary, nvarchar veya xml türüdür.
Açıklamalar
Ayrıca ALTER XML SCHEMA COLLECTION kullanarak koleksiyona yeni ad alanları ekleyebilir veya koleksiyondaki mevcut ad alanlarına yeni bileşenler ekleyebilirsiniz.
Koleksiyonları kaldırmak için DROP XML SCHEMA COLLECTION kullanın.
Permissions
XML SCHEMA COLLECTION oluşturmak için aşağıdaki izin kümelerinden en az biri gerekir:
-
CONTROLsunucuda izin -
ALTER ANY DATABASEsunucuda izin -
ALTERveritabanında izin -
CONTROLveritabanında izin -
ALTER ANY SCHEMAveritabanında izin veCREATE XML SCHEMA COLLECTIONizin -
ALTERveyaCONTROLveritabanındaki ilişkisel şema veCREATE XML SCHEMA COLLECTIONizin üzerinde izin
Örnekler
A. Veritabanında XML şema koleksiyonu oluşturma
Aşağıdaki örnek XML şema koleksiyonunu ManuInstructionsSchemaCollectionoluşturur. Koleksiyonun yalnızca bir şema ad alanı vardır.
-- 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 collection name specified.
DECLARE @x AS 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;
Alternatif olarak, şema koleksiyonunu bir değişkene atayabilir ve deyiminde değişkenini CREATE XML SCHEMA COLLECTION aşağıdaki gibi belirtebilirsiniz:
DECLARE @MySchemaCollection AS NVARCHAR (MAX);
SET @MySchemaCollection = N' copy the schema collection here';
CREATE XML SCHEMA COLLECTION MyCollection
AS @MySchemaCollection;
Örnekteki değişken türündedir nvarchar(max) . Değişken xml veri türünde de olabilir ve bu durumda örtük olarak bir dizeye dönüştürülür.
Daha fazla bilgi için bkz. Depolanan XML şema koleksiyonunu görüntüleme.
Şema koleksiyonlarını bir xml türü sütununda depolayabilirsiniz. Bu durumda, XML şema koleksiyonu oluşturmak için aşağıdaki adımları gerçekleştirin:
Deyimini kullanarak
SELECTsütundan şema koleksiyonunu alın ve xml türünde veya varchar türünde bir değişkene atayın .Deyiminde
CREATE XML SCHEMA COLLECTIONdeğişken adını belirtin.
Yalnızca CREATE XML SCHEMA COLLECTION SQL Server'ın anladığı şema bileşenlerini depolar; XML şemasındaki her şey veritabanında depolanmaz. Bu nedenle, XML şema koleksiyonunu tam olarak sağlandığı gibi geri almak istiyorsanız, XML şemalarınızı bir veritabanı sütununa veya bilgisayarınızdaki başka bir klasöre kaydetmeniz gerekir.
B. Şema koleksiyonunda birden çok şema ad alanı belirtme
BIR XML şema koleksiyonu oluştururken birden çok XML şeması belirtebilirsiniz. Örneğin:
CREATE XML SCHEMA COLLECTION MyCollection
AS N'
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<!-- Contents of schema here -->
</xsd:schema>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<!-- Contents of schema here -->
</xsd:schema>';
Aşağıdaki örnek, iki XML şeması ad alanı içeren XML şema koleksiyonunu ProductDescriptionSchemaCollection oluşturur.
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. Hedef ad alanı belirtmeyen bir şemayı içeri aktarma
Öznitelik içermeyen bir targetNamespace şema bir koleksiyona aktarılırsa, bileşenleri aşağıdaki örnekte gösterildiği gibi boş dize hedef ad alanıyla ilişkilendirilir. Koleksiyonda içeri aktarılan bir veya daha fazla şemanın ilişkilendirilmemesi, birden çok şema bileşeninin (potansiyel olarak ilişkisiz) varsayılan boş dize ad alanıyla ilişkilendirilmesine neden olur.
-- 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
INNER 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 = '';
D. XML şema koleksiyonu ve toplu işleri kullanma
Şema koleksiyonuna, oluşturulduğu toplu işte başvurulamıyor. Oluşturulduğu toplu işteki bir koleksiyona başvurmaya çalışırsanız, koleksiyonun var olmadığını belirten bir hata alırsınız. Aşağıdaki örnek çalışır; ancak, ve öğesini kaldırırsanız GO ve bu nedenle xml şeması koleksiyonuna başvurarak aynı toplu işe bir XML değişkeni yazmayı denerseniz, hata döndürür.
CREATE XML SCHEMA COLLECTION mySC
AS '
<schema xmlns="http://www.w3.org/2001/XMLSchema">
<element name="root" type="string"/>
</schema>
';
GO
CREATE TABLE T
(
Col1 XML(mySC)
);
GO