CREATE kolekcja SCHEMATU XML (języka Transact-SQL)
Importuje elementy schematu do bazy danych.
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:
Pobrać kolekcja schematu z kolumna za pomocą instrukcja SELECT i przypisać ją do zmiennej xml tekst, lub varchar Typ.
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
See Also