Generowanie wystąpienia XML

Zgodnie z opisem w Typ danych XML, wystąpienia XML można przechowywać w SQL Server Baza danych. W tym temacie opisano sposób generowania wystąpień XML.

W SQL Server, można generować wystąpień XML w następujący sposób:

  • Typ rzutowanie wystąpień ciąg znaków.

  • Za pomocą instrukcja SELECT z klauzula FOR XML.

  • Przy użyciu stałego przypisania.

  • Za pomocą ładowanie zbiorcze.

Wpisz ciąg rzutowania i Binary wystąpienia

You can parse any of the SQL Server string data types, such as [n][var]char, [n]text, varbinary,and image, into the xml data type by casting (CAST) or converting (CONVERT) the string to the xml data type.Bez typu XML jest sprawdzane, aby potwierdzić dobrze uformowany.Jeśli istnieje skojarzony schemat XML typu sprawdzania poprawności jest również wykonywane.Aby uzyskać więcej informacji zobaczTyped XML Compared to Untyped XML.

Dokumenty XML mogą być kodowane z innego kodowania (na przykład UTF-8, UTF-16, 1252 okien).Poniżej opisano zasady dotyczące współdziałania ciąg i binarne typy urządzenie źródłowe z kodowaniem dokumentu XML i zachowania analizator składni.

Od czasu nvarchar zakłada kodowania unicode dwu bajtowych takich jak UTF-16 lub UCS-2, analizator składni XML zostanie potraktowany wartość ciąg jako Unicode dwu bajtowych zakodowane dokumentu XML lub fragmentu.Oznacza to, że dokument XML musi być zakodowany w trybie Unicode dwu bajtowych również kodowania zgodny z typem urządzenie źródłowe danych.UTF-16 zakodowane XML dokument może mieć UTF-16 znacznika kolejności bajtów (BOM), ale go nie jest konieczne, ponieważ ułatwia kontekście typ urządzenie źródłowe zwykłego, że tylko może być Unicode dwu bajtowych zakodowane dokumentu.

Zawartość varchar ciąg jest traktowana jako jednobajtowych zakodowanego XML dokumentu/fragment przez analizator składni XML.Ponieważ varchar ciąg źródłowy ma strona kodowa skojarzonych, analizator składni będzie używał danej strona kodowa do kodowania, jeśli nie wyraźnej kodowania jest określony w formacie XML, sam, jeśli wystąpienie XML ma BOM-U lub deklarację kodowania, BOM lub deklaracja musi być zgodna ze strona kodowa, w przeciwnym razie analizator składni zgłosi błąd.

Zawartość varbinarnym jest traktowane jako strumień codepoint przekazywane bezpośrednio do analizatora składni XML.W ten sposób dokument XML lub fragmentu, służące do BOM-U lub inne wbudowane kodowania informacji.Analizator składni będzie tylko Spójrz na strumień, aby określić kodowanie.Oznacza to, że XML musi dostarczyć BOM UTF-16 kodowania UTF-16 i instancji bez BOM i bez deklaracja kodowanie będzie interpretowany jako UTF-8.

Jeśli kodowanie dokumentu XML nie jest znany z góry, a dane są przekazywane jako ciąg znaków lub danych binarnych, a nie dane XML przed rzutowania do formatu XML, zalecane jest, aby dane są traktowane varbinarnym.Na przykład podczas odczytywania danych z pliku XML przy użyciu OpenRowset(), co należy określić dane, które mają być odczytywane jako varbinary(max) value:

select CAST(x as XML) 
from OpenRowset(BULK 'filename.xml', SINGLE_BLOB) R(x)

SQL Server wewnętrznie reprezentuje XML w skuteczny reprezentacja binarna, która używa kodowania UTF-16.Kodowanie dostarczone przez użytkownika nie jest zachowywane, ale jest uważane za w trakcie analizy.

Wpisz rzutowanie CLR typów zdefiniowanych przez użytkownika

Jeśli zdefiniowany przez użytkownika typ danych CLR serializacji XML, wystąpienia tego typu mogą być jawnie rzutowane na typu danych XML.Aby uzyskać więcej informacji na temat serializacji XML CLR, zdefiniowane przez użytkownika, wpisane zobacz Serializacji XML z CLR obiektów bazy danych.

Znak odstępu obsługi określonego XML

W SQL Server, odstęp wewnątrz zawartości elementu jest uważany za nieznaczne, jeśli występuje wewnątrz sekwencji danych znakowych białe miejsca tylko rozdzielone oznaczeń, takich jak rozpocząć lub zakończyć tagów i nie jest entitized. (CDATA sekcje są ignorowane.) Ta obsługa obsługi odstępu różni się od opisu odstępu w specyfikacji XML 1.0, opublikowanych przez konsorcjum World Wide Web Consortium (W3C). Dzieje się tak, ponieważ analizator składni XML w SQL Server rozpoznaje tylko ograniczoną liczbę DTD podzestawy, zgodnie z definicją w XML 1.0. Aby uzyskać więcej informacji na temat ograniczonych podzestawy DTD obsługiwane w SQL Server, zobacz CAST and CONVERT (Transact-SQL).

Domyślnie analizator składni XML odrzuca nieznaczących białe miejsca konwertowane ciąg danych do formatu XML, jeśli spełniony jest jeden z następujących czynności:

  • The xml:space atrybut nie jest zdefiniowany w elemencie lub jej element nadrzędny.

  • The xml:space atrybut in effect on an element, or one of its element nadrzędny elements, has the value of default.

Na przykład:

declare @x xml
set @x = '<root>      <child/>     </root>'
select @x 

Oto wynik:

<root><child/></root>

Można jednak zmienić to zachowanie.Aby zachować białe miejsca, w przypadku wystąpienie DT xml, należy użyć operator CONVERT i jej opcjonalne Styl parametr zestaw na wartość 1.Na przykład:

SELECT CONVERT(xml, N'<root>      <child/>     </root>', 1)

Jeśli Styl parametr nie jest używany lub jego wartość jest ustawiona na 0, nieznaczących białe miejsca nie jest zachowywana do przekształcenia xml DT wystąpienie.Aby uzyskać więcej informacji na temat sposobów korzystania z operator CONVERT i jego Styl parametr podczas konwertowania ciąg danych xml DT wystąpienia, zobacz temat CAST and CONVERT (Transact-SQL).

Przykład: Rzutować wartości ciąg na pismo xml i przypisać ją do kolumna

Następujące poświaty przykład ciąg zmienna, która zawiera fragmentu XML do XML danych wpisz i zapisuje go w XML typ kolumna:

CREATE TABLE T(c1 int primary key, c2 xml)
go
DECLARE  @s varchar(100)
SET @s = '<Cust><Fname>Andrew</Fname><Lname>Fuller</Lname></Cust>' 

Następująca operacja wstawiania niejawnie konwertuje ciąg XML type:

INSERT INTO T VALUES (3, @s) 

Można bezpośrednio cast() ciąg, który ma być XML type:

INSERT INTO T VALUES (3, cast (@s as xml))

Można też użyć convert(), jak pokazano poniżej:

INSERT INTO T VALUES (3, convert (xml, @s)) 

Przykład: Konwertowanie ciąg na pismo xml i przypisać ją do zmiennej

W poniższym przykładzie ciąg jest konwertowany na XML typu i przypisany do zmiennej XML typ danych:

declare @x xml
declare  @s varchar(100)
SET @s = '<Cust><Fname>Andrew</Fname><Lname>Fuller</Lname></Cust>' 
set @x =convert (xml, @s)
select @x

Za pomocą instrukcja SELECT z klauzula FOR XML

Klauzula FOR XML w instrukcja SELECT służy do zwracania wyniki w formacie XML.Na przykład:

DECLARE @xmlDoc xml
SET @xmlDoc = (SELECT Column1, Column2
               FROM   Table1, Table2
               WHERE   Some condition
               FOR XML AUTO)
 ...

Instrukcja SELECT zwraca tekstowy fragmentu XML, który następnie jest analizowany w przypisaniu XML Zmienna typu danych.

Można również użyć Dyrektywa TYPE w klauzula FOR XML, które bezpośrednio zwraca wynik kwerendy jako FOR XMLXML type:

Declare @xmlDoc xml
SET @xmlDoc = (SELECT ProductModelID, Name
               FROM   Production.ProductModel
               WHERE  ProductModelID=19
               FOR XML AUTO, TYPE)
SELECT @xmlDoc

Oto wynik:

<Production.ProductModel ProductModelID="19" Name="Mountain-100" />...

W poniższym przykładzie maszynowy XML do wynikiem kwerendy FOR XML zostanie wstawionyXML typ kolumna:

CREATE TABLE T1 (c1 int, c2 xml)
go
INSERT T1(c1, c2)
SELECT 1, (SELECT ProductModelID, Name
           FROM Production.ProductModel
           WHERE ProductModelID=19
           FOR XML AUTO, TYPE)
SELECT * FROM T1
go

Aby uzyskać więcej informacji na temat FOR XML zobacz Constructing XML Using FOR XML.

Uwaga

SQL Server Zwraca xml wystąpienia do klient z innym serwerem konstrukcje typ danych, takich jak XML dla kwerendy, należy użyć dyrektywy typ lub gdy xml Typ danych jest używane do zwracania XML z kolumn SQL, zmiennych i parametrów wyjściowych. W kodzie aplikacji klient, dostawca ADO.NET żądań, które to xml informacje o typie danych jest wysyłany w binarnym kodowanie z serwera. Jeśli używasz FOR XML bez dyrektywa typ danych XML zwraca jednak jako typu ciąg.W każdym przypadek zawsze będzie mógł obsługiwać obu formularzy XML dostawca klient.

Przy użyciu przypisania stała

Stała znakowa mogą być używane w przypadku, gdy wystąpienie XML typ danych jest oczekiwany.Jest to taka sama, jak dorozumianych CAST ciąg do formatu XML.Na przykład:

DECLARE @xmlDoc xml
SET @xmlDoc = '<Cust><Fname>Andrew</Fname><Lname>Fuller</Lname></Cust>' 
-- Or
SET @xmlDoc = N'<?xml version="1.0" encoding="ucs-2"?><doc/>'

W poprzednim przykładzie niejawnie konwertuje ciąg, który ma być XML danych wpisz i przypisuje go do XML typu zmiennej.

W poniższym przykładzie wstawia stały ciąg do XML typ kolumna:

CREATE TABLE T(c1 int primary key, c2 xml)
INSERT INTO T VALUES (3, '<Cust><Fname>Andrew</Fname><Lname>Fuller</Lname></Cust>') 

Uwaga

Wpisane XML XML jest sprawdzany na określonego schematu.Aby uzyskać więcej informacji zobaczTyped XML Compared to Untyped XML.

Za pomocą ładowanie zbiorcze

Rozszerzone OPENROWSET (języka Transact-SQL) funkcji pozwala na ładowanie zbiorcze dokumentów XML w bazie danych.Można zbiorczej obciążenia wystąpienia XML z plików do XML typ kolumny w bazie danych.W przypadku pracy próbek zobacz Examples of Bulk Importing and Exporting XML Documents. Aby uzyskać więcej informacji na temat ładowania dokumentów XML zobacz Ładowanie danych XML.

W tej sekcji

Temat

Description

Retrieving XML Data

W tym artykule opisano elementy XML wystąpienia, które nie są zachowywane, gdy są one przechowywane w bazach danych.