ALTER KOLEKCJI SCHEMATU XML (Transact-SQL)
Dodaje nowe składniki schematu do istniejącego schematu XML kolekcja.
Składnia
ALTER XML SCHEMA COLLECTION [ relational_schema. ]sql_identifier ADD 'Schema Component'
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.'Schema Component'
Jest składnikiem schematu do wstawienia.
Uwagi
Użyć KOLEKCJI zmiany SCHEMATU XML do dodawania nowych schematów XML, w których obszarach nazw nie są już w schemacie XML kolekcjalub dodać nowe składniki do istniejącego obszaru nazw w kolekcja.
W następującym przykładzie dodano nowy <elementu> do istniejącego obszaru nazw http://MySchema/test_xml_schema w kolekcja MyColl.
-- First create an XML schema collection.
CREATE XML SCHEMA COLLECTION MyColl AS '
<schema
xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://MySchema/test_xml_schema">
<element name="root" type="string"/>
</schema>'
-- Modify the collection.
ALTER XML SCHEMA COLLECTION MyColl ADD '
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://MySchema/test_xml_schema">
<element name="anotherElement" type="byte"/>
</schema>'
ALTER XML SCHEMADodaje element <anotherElement> do wcześniej zdefiniowanych nazw http://MySchema/test_xml_schema.
Należy zauważyć, że niektóre składniki, które chcesz dodać w kolekcja odniesienia składników, które są już w tej samej kolekcja, należy użyć <import namespace="referenced_component_namespace" />.Jednakże nie jest prawidłowy, aby użyć bieżącego obszaru nazw schematu w <xsd:import>, i w związku z tym składniki z tej samej miejsce docelowe obszar nazw jako bieżącego obszaru nazw schematu są automatycznie importowane.
Aby usunąć kolekcje, użyj UPUŚĆ KOLEKCJI SCHEMATU XML (Transact-SQL).
Jeśli schematu kolekcja już zawiera symbol wieloznaczny lax sprawdzania poprawności lub elementu typu xs:anyType, dodanie nowego globalny element, typ lub atrybut deklaracja do schematu kolekcja spowoduje ponowne przechowywanych danych jest ograniczony przez schematu kolekcja.
Uprawnienia
Aby zmodyfikować KOLEKCJI SCHEMATU XML wymaga uprawnień ALTER w kolekcja.
Aby uzyskać więcej informacji, zobacz Uprawnienia do kolekcji schematu XML.
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 the collection name
-- that is 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 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.
Przechowywanie kolekcji schematu w xml kolumnawpisz.W tym przypadekdo utworzenia schematu XML kolekcja, wykonaj następujące czynności:
Pobieranie schematu kolekcja z kolumna przy użyciu instrukcja SELECT i przypisać do zmiennej xml typu, lub varchar typu.
Określ nazwę zmiennej w instrukcjautworzyć KOLEKCJI SCHEMATU XML.
UTWORZYĆ KOLEKCJI SCHEMATU XML są przechowywane tylko składniki schematu, SQL Server rozumie; 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 N'
<xsd:schema>....</xsd:schema>
<xsd:schema>...</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 kilku schematów przywożone w kolekcja wyniki w wielu składników schematu (potencjalnie niepowiązanych) są skojarzone z domyślny obszar 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=''
Zobacz także