UTWORZYĆ KOLEKCJI SCHEMATU XML (Transact-SQL)

Przywóz składników schematu do bazy danych.

Ikona łącza do tematuJęzyka Transact-SQL składni konwencje

Składnia

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

Argumenty

  • relational_schema
    Identyfikuje nazwę schematu relacyjnego.Nie jest określony, przyjmowana jest domyślna schematu relacyjnego.

  • sql_identifier
    Jest identyfikatorem SQL schematu XML kolekcja.

  • Expression
    Jest zmienna ciąg stała lub wartość skalarna .Is varchar, varbinary, nvarchar, or xml type.

Uwagi

Także nowe obszary nazw można dodać do kolekcja lub dodać nowe składniki istniejących obszarów nazw w kolekcja za pomocą ALTER KOLEKCJI SCHEMATU XML.

Aby usunąć kolekcje, użyj UPUŚĆ KOLEKCJI SCHEMATU XML (Transact-SQL).

Uprawnienia

Aby utworzyć KOLEKCJI SCHEMATU XML wymaga co najmniej jeden z następujących zestawów uprawnień:

  • Uprawnienie Kontrola na serwerze

  • ZMIENIAĆ żadnych uprawnień bazy danych na serwerze

  • ZMIEŃ uprawnienia do bazy danych

  • Uprawnienie Kontrola w bazie danych

  • ZMIENIĆ wszystkie uprawnienia SCHEMATU i utworzyć KOLEKCJI SCHEMATU XML w bazie danych

  • ZMIEŃ lub FORMANTU uprawnienie schematu relacyjnego i uprawnienie Tworzenie KOLEKCJI SCHEMATU XML, bazy danych

Przykłady

A.Tworzenie schematu XML kolekcja w bazie danych

Poniższy przykład tworzy schematu XML kolekcja ManuInstructionsSchemaCollection.kolekcja zawiera tylko jeden obszar 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 collection name 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żna przypisać do zmiennej schematu kolekcja i określić zmiennej w CREATE XML SCHEMA COLLECTION instrukcja w następujący sposób:

DECLARE @MySchemaCollection nvarchar(max)
Set @MySchemaCollection  = N' copy the schema collection here'
CREATE XML SCHEMA COLLECTION MyCollection AS @MySchemaCollection 

Zmienna w przykładzie jest z nvarchar(max) typu.Zmienna może być również z xml typu danych, w którym to przypadekjest niejawnie konwertowane na ciąg.

Aby uzyskać więcej informacji, zobacz Przeglądanie kolekcji schematu XML przechowywane.

Może przechowywać kolekcji schematu w xml kolumnawpisz.W tym przypadekdo utworzenia schematu XML kolekcja, wykonaj następujące czynności:

  1. Pobieranie schematu kolekcja z kolumna przy użyciu instrukcja SELECT i przypisać do zmiennej xml typu, lub varchar typu.

  2. Określ nazwę zmiennej w instrukcjautworzyć KOLEKCJI SCHEMATU XML.

UTWORZYĆ KOLEKCJI SCHEMATU XML są przechowywane tylko składniki schematu, które rozumie SQL Server; wszystko w schemacie XML nie jest przechowywana w bazie danych.XML schematu kolekcja wstecz dokładnie w sposób, który został dostarczony, należy firma Microsoft zaleca, aby zapisać schematów XML w bazie danych kolumna lub innym folderze na komputerze.

B.Określanie wielu nazw schematu w schemacie kolekcja

Wiele schematów XML można określić podczas tworzenia schematu XML kolekcja.Na przykład:

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

Poniższy przykład tworzy schematu XML kolekcja ProductDescriptionSchemaCollection , zawiera dwa obszary nazw schematu XML.

CREATE XML SCHEMA COLLECTION ProductDescriptionSchemaCollection AS 
'<xsd:schema targetNamespace="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain"
    xmlns="https://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="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription" 
    elementFormDefault="qualified" 
    xmlns:mstns="http://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 nie określono miejsce docelowe obszaru nazw

Jeśli schemat, który nie zawiera targetNamespaceatrybut jest importowany w kolekcja, jego składniki są skojarzone zmiejsce docelowe obszarem nazw pusty ciąg, jak pokazano w poniższym przykładzie. Należy zauważyć, że nie kojarzenia jednego lub więcej schematów przywożone w kolekcja powoduje wiele składników schematu (potencjalnie niepowiązanych) ma być skojarzony z domyślnego obszaru nazw pusty ciąg .

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

D.Za pomocą schematu XML kolekcja i instancji

Schemat kolekcja nie można odwoływać się w tej samej partia , gdzie jest tworzona.Próba odwołania kolekcja w tej samej partia , której został utworzony zostanie komunikat o błędzie informujący, że kolekcja nie istnieje.Poniższy przykład działa; Jednak po usunięciu GO i dlatego próba odwołania kolekcja schematu XML do wpisz xml zmienną w tej samej partia, zwróci błąd.

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