Megosztás a következőn keresztül:


XML-SÉMAGYŰJTEMÉNY LÉTREHOZÁSA (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példánySQL-adatbázis a Microsoft Fabricben

Importálja a sémaösszetevőket egy adatbázisba.

Transact-SQL szintaxis konvenciók

Szemantika

CREATE XML SCHEMA COLLECTION [ <relational_schema>. ] sql_identifier AS Expression

Arguments

relational_schema

Azonosítja a relációs séma nevét. Ha nincs megadva, a rendszer feltételezi az alapértelmezett relációs sémát.

sql_identifier

Az XML-sémagyűjtemény SQL-azonosítója.

Kifejezés

Sztringállandó vagy skaláris változó. Varchar, varbinary, nvarchar vagy xml típusú.

Megjegyzések

Új névtereket is hozzáadhat a gyűjteményhez, vagy új összetevőket adhat hozzá a gyűjtemény meglévő névtereihez az ALTER XML SCHEMA COLLECTION használatával.

Gyűjtemények eltávolításához használja a DROP XML SÉMAGYŰJTEMÉNYt.

Permissions

XML-SÉMAGYŰJTEMÉNY létrehozásához legalább az alábbi engedélyek egyikére van szükség:

  • CONTROL engedély a kiszolgálón
  • ALTER ANY DATABASE engedély a kiszolgálón
  • ALTER engedély az adatbázisban
  • CONTROL engedély az adatbázisban
  • ALTER ANY SCHEMA engedély és CREATE XML SCHEMA COLLECTION engedély az adatbázisban
  • ALTER vagy CONTROL az adatbázis relációs sémájára és CREATE XML SCHEMA COLLECTION engedélyére vonatkozó engedély

Példák

A. XML-sémagyűjtemény létrehozása az adatbázisban

Az alábbi példa létrehozza az XML-sémagyűjteményt ManuInstructionsSchemaCollection. A gyűjtemény csak egy sémanévtérrel rendelkezik.

-- 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;

Másik lehetőségként hozzárendelheti a sémagyűjteményt egy változóhoz, és az utasításban az alábbiak szerint adhatja meg a CREATE XML SCHEMA COLLECTION változót:

DECLARE @MySchemaCollection AS NVARCHAR (MAX);

SET @MySchemaCollection = N' copy the schema collection here';

CREATE XML SCHEMA COLLECTION MyCollection
    AS @MySchemaCollection;

A példában szereplő változó típusa.nvarchar(max) A változó xml-adattípusú is lehet, ebben az esetben implicit módon sztringgé konvertálja.

További információ: Tárolt XML-sémagyűjtemény megtekintése.

A sémagyűjteményeket xml típusú oszlopban tárolhatja. Ebben az esetben XML-sémagyűjtemény létrehozásához hajtsa végre a következő lépéseket:

  1. Kérje le a sémagyűjteményt az oszlopból egy SELECT utasítással, és rendelje hozzá egy xml típusú változóhoz vagy egy varchar típushoz.

  2. Adja meg a változó nevét az CREATE XML SCHEMA COLLECTION utasításban.

A CREATE XML SCHEMA COLLECTION rendszer csak az SQL Server által megértett sémaösszetevőket tárolja, az XML-sémában lévő összes összetevőt nem tárolja az adatbázis. Ezért ha az XML-sémagyűjteményt pontosan a megadott módon szeretné visszakapni, mentse az XML-sémákat egy adatbázisoszlopba vagy a számítógép más mappájába.

B. Több sémanévtér megadása sémagyűjteményben

XML-sémacsoport létrehozásakor több XML-sémát is megadhat. Például:

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>';

Az alábbi példa két XML-sémanévteret tartalmazó XML-sémagyűjteményt ProductDescriptionSchemaCollection hoz létre.

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. Olyan séma importálása, amely nem ad meg célnévteret

Ha egy olyan sémát importál egy gyűjteménybe, amely nem tartalmaz targetNamespace attribútumot, annak összetevői az üres sztring célnévteréhez vannak társítva az alábbi példában látható módon. A gyűjteményben importált egy vagy több séma társításának megszüntetése esetén több sémaösszetevő (potenciálisan nem kapcsolódó) társítása az alapértelmezett üres sztringnévtérrel.

-- 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-sémagyűjtemény és kötegek használata

A sémagyűjtemények nem hivatkozhatók ugyanabban a kötegben, amelyben létrehozták. Ha ugyanabban a kötegben próbál hivatkozni egy gyűjteményre, ahol létrejött, hibaüzenet jelenik meg, amely szerint a gyűjtemény nem létezik. Az alábbi példa működik; Ha azonban eltávolítja GO , és ezért megpróbál hivatkozni az XML-sémagyűjteményre, hogy egy XML-változót írjon be ugyanabban a kötegben, hibát ad vissza.

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