Udostępnij za pośrednictwem


CREATE kolekcja SCHEMATU XML (języka Transact-SQL)

Importuje elementy schematu do bazy danych.

Topic link iconKonwencje składni języka Transact-SQL

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

Argumenty

  • relational_schema
    Identyfikuje nazwę schematu relacyjnego.Jeśli nie zostanie określony, przyjmowana jest wartość domyślnego schematu relacyjnego.

  • sql_identifier
    Jest identyfikatorem SQL dla kolekcja schematu XML.

  • Expression
    To zmienna stałego lub wartość skalarna ciąg.Czy varchar, varbinary, nvarchar, lub xml Typ.

Remarks

Można również dodać do kolekcja nowych nazw lub dodać nowe składniki do istniejących obszarów nazw w kolekcja za pomocą ZMIENIANIE SCHEMATU XML kolekcja.

Aby usunąć kolekcje, należy użyć DROP kolekcja SCHEMATU XML (języka Transact-SQL).

Uprawnienia

Aby utworzyć kolekcja SCHEMATU XML, wymaga co najmniej jeden z następujących uprawnień:

  • KONTROLA uprawnień na serwerze

  • ALTER DATABASE bez uprawnień na serwerze

  • ALTER uprawnień do bazy danych

  • Uprawnienie Kontrola w bazie danych

  • ALTER ANY SCHEMA i uprawnienie CREATE kolekcja SCHEMATU XML do bazy danych

  • ALTER lub CONTROL uprawnienie schematu relacyjnych i uprawnienia CREATE kolekcja SCHEMATU XML, bazy danych

Przykłady

A.Tworzenie kolekcja schematu XML, bazy danych

Poniższy przykład tworzy kolekcja schematu XML ManuInstructionsSchemaCollection. Kolekcja jest 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 w kolekcja schematu i określić zmienną 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 nvarchar(max) Typ. Mogą również być zmiennej xml Typ danych, w którym to przypadek niejawnie jest ona konwertowana na ciąg znaków.

Aby uzyskać więcej informacji zobaczViewing a Stored XML Schema Collection.

Możesz zachować kolekcji schematu w xml Typ kolumna. W takim przypadek należy utworzyć kolekcja schematu XML, należy wykonać następujące czynności:

  1. Pobrać kolekcja schematu z kolumna za pomocą instrukcja SELECT i przypisać ją do zmiennej xml tekst, lub varchar Typ.

  2. Określ nazwę zmiennej w instrukcja CREATE kolekcja SCHEMATU XML.

CREATE kolekcja SCHEMATU XML są przechowywane tylko składniki schematu zrozumienie procesu programu SQL Server, wszystkie elementy w schemacie XML nie jest przechowywana w bazie danych.Jeśli chcesz ponownie kolekcja schematu XML dokładnie tak jak zostały dostarczone, firma Microsoft zaleca, aby zapisać swoją schematów XML kolumna bazy danych lub niektórych innego folderu na komputerze.

B.Określanie wielu obszarów nazw w schemacie w kolekcja schematu

Po utworzeniu kolekcja schematu XML, można określić wiele schematów XML.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 kolekcja schematu XML ProductDescriptionSchemaCollection które 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, których nie określono docelowego obszaru nazw

Jeśli schemat, który nie zawiera miejsce docelowe obszar nazw atrybut jest importowany w kolekcja, jego składniki są skojarzone z obszarem nazw miejsce docelowe pusty ciąg znaków, jak pokazano w poniższym przykładzie.Należy zauważyć, że nie kojarzenia jednego lub kilku schematów importowane w kolekcja powoduje wiele składników schematu (potencjalnie niepowiązanych) ma być skojarzony z domyślną puste ciąg obszaru nazw.

-- 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ą kolekcja schematu XML i instancji

Kolekcja schematu nie może odwoływać się w tym samym partia gdzie została utworzona.Jeśli zostanie podjęta próba odwołania kolekcji, w tym samym partia tam, gdzie został on utworzony, można będzie komunikat o błędzie, informujący, że kolekcja nie istnieje.Poniższy przykład działa; jednak po usunięciu GO i dlatego próbuje odwołać kolekcja schematu XML, aby wpisać xml w tej samej zmiennej partia, zwraca 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