Udostępnij za pośrednictwem


Generowanie instancji XML

Jak opisano w Typ danych XML, można przechowywać wystąpień XML w SQL Server bazy 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 instancje ciąg.

  • Za pomocą instrukcja SELECT z klauzula dla XML.

  • Przy użyciu stała przypisań.

  • Za pomocą ładowanie zbiorcze.

Wpisz ciąg odlewania i binarne wystąpień

Można analizować żadnego z SQL Server ciąg typów danych, takich jak [n]var char, [n] tekst, varbinary, i obrazu, do xml typ danych przez rzutowanie (CAST) lub konwersji ciągu (PRZEKONWERTOWAĆ) xml typu danych.Bez typu XML jest sprawdzany potwierdzić jego dobrze uformowany.Jeśli istnieje skojarzony schemat xml typu sprawdzania poprawności jest również przeprowadzana.Aby uzyskać więcej informacji, zobacz XML wpisywanych w porównaniu do pliku XML bez typu.

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

Ponieważ nvarchar zakłada unicode dwubajtowy kodowania, takich jak UTF-16 lub UCS-2, analizator składni XML będzie traktowany wartość ciąg jako zakodowanych w Unicode dwubajtowy dokumentu XML lub fragmentu.Oznacza to dokument XML musi być zakodowane w Unicode dwubajtowy kodowania oraz są zgodne z typem źródło danych.UTF-16 zakodowane XML dokument może mieć znacznik porządku bajtów (BOM), UTF-16, ale nie jest konieczne do, ponieważ kontekst typ źródło ułatwia Wyczyść tylko może być Unicode dwubajtowy zakodowane dokumentu.

Zawartość varchar ciąg jest traktowana jako jeden bajt zakodowany XML/fragment dokumentu przez XML parser.Ponieważ varchar źródło ciąg ma strona kodowa skojarzonych, analizator składni będzie używał danej strona kodowa dla kodowania, jeśli nie jawne kodowaniu XML, sam jeśli BOM lub deklaracja kodowania, BOM lub deklaracja instancję XML musi być zgodny ze strona kodowa, w przeciwnym razie parser zgłosi błąd.

Zawartość varbinary jest traktowane jako strumień punktów kodowych znaków dwuskładnikowych przekazywane bezpośrednio do analizatora składni XML.W ten sposób dokument XML lub fragmentu musi podać BOM lub innych kodowania informacji wewnętrznych.Parser tylko wygląd strumień, aby określić kodowanie.Oznacza to, że UTF-16 zakodowany XML musi dostarczyć BOM UTF-16 i wystąpienie bez BOM i deklaracja kodowania zostanie zinterpretowany jako UTF-8.

Jeśli kodowanie dokumentu XML nie jest znany z wyprzedzeniem i dane są przekazywane jako ciąg lub dane binarne, zamiast danych XML przed odlewania XML, zalecane jest traktowanie danych jako varbinary.Na przykład podczas odczytywania danych z pliku XML przy użyciu OpenRowset(), jedną należy określić dane odczytywane jako varbinary(max) wartość:

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

SQL Server wewnętrznie reprezentuje XML w efektywne reprezentacja binarna, która używa kodowania UTF-16.Kodowanie dostarczonych przez użytkownika nie jest zachowywany, ale uznaje się w trakcie analizy.

Wpisz CLR rzutowanie typów zdefiniowanych przez użytkownika

Jeśli CLR typ zdefiniowany przez użytkownika serializacji XML ma wystąpień tego typu można jawnie rzutować na typ danych XML.Aby wpisane więcej szczegółów serializacji XML CLR zdefiniowane przez użytkownika, zobacz Serializacji XML z CLR obiektów bazy danych.

Białe miejsca obsługi maszynowy XML

W SQL Server, białe miejsca wewnątrz zawartości elementu jest uważane za nieznaczne, jeśli występuje wewnątrz sekwencji danych znakowych białe miejsca tylko rozdzielone adiustacji, takich jak rozpocząć lub zakończyć znaczniki i nie jest entitized.(Sekcje CDATA są ignorowane.) Ta obsługa białe miejsca obsługi różni się od opisu owiatło w specyfikacji XML 1.0, opublikowane przez World Wide Web Consortium (W3C).Wynika to z analizatora składni XML w SQL Server rozpoznaje ograniczoną liczbę podzestawy DTD, jak zdefiniowano w XML 1.0.Więcej informacji o ograniczonej podzestawy DTD obsługiwane w SQL Server, zobacz CAST i CONVERT (Transact-SQL).

Domyślnie analizator składni XML odrzuca światła nieznaczące go konwertuje ciąg danych XML, jeśli spełniony jest jeden z następujących czynności:

  • The xml:spacenie zdefiniowano atrybut elementu lub jego elementy element nadrzędny.

  • xml:space atrybut w elemencie lub jednego z jego elementów element nadrzędny ma wartość domyślną.

Na przykład:

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

Jest to wynikiem:

<root><child/></root>

Można jednak zmienić to zachowanie.Aby zachować białe miejsca na instancję xml DT, należy użyć operator konwersji i jego opcjonalny 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 zestaw 0, światła nieznaczące nie jest zachowywany na konwersję instancji xml DT.Aby uzyskać więcej informacji na temat konwersji operator i jego styl Zobacz parametr podczas konwersji ciąg danych xml DT wystąpienia CAST i CONVERT (Transact-SQL).

Przykład: Rzutować wartości ciąg XML maszynowy i przypisać ją do kolumna

Poniższy przykład posługując się miarką zmienna typu ciąg, zawierającej fragment XML do xml typ danych i następnie przechowuje je 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 typu:

INSERT INTO T VALUES (3, @s) 

Można bezpośrednio cast() ciąg xml typu:

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

Lub użyć convert(), jak pokazano poniżej:

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

Przykład: Przekonwertować ciąg xml maszynowy i przypisać ją do zmiennej

W poniższym przykładzie ciąg jest konwertowany na xml wpisz i przypisana 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ą instrukcji SELECT z klauzulą XML dla

Klauzula XML dla instrukcja SELECT umożliwia zwrócenie wyniki jako 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 fragment XML, który następnie jest analizowany podczas przypisania do xml zmiennej typu danych.

Można również użyć dyrektywy typu w klauzula XML dla, które bezpośrednio zwraca wynik kwerendy jako XML dla xml typu:

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

Jest to wynikiem:

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

W poniższym przykładzie maszynowy xml wynik kwerendy dla XML jest wstawiany do xml 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 formatu XML dla Zobacz Konstruowanie XML za pomocą języka XML dla.

Ostrzeżenie

SQL ServerZwraca xml wystąpień klient z innym serwerem konstrukcje typu danych, takich jak XML dla kwerendy, należy użyć dyrektywy typu lub gdy xml Typ danych jest używane do zwracania XML z SQL kolumn, zmiennych i parametrów wyjściowych.W kodzie aplikacji klient, ADO.Dostawca netto żąda to xml wysłane informacje o typie danych w pliku binarnym kodowanie z serwera.Jeśli używasz dla XML bez dyrektywy typ danych XML zwraca jednak jako typ ciąg.W każdym przypadek dostawca klient zawsze będzie obsługiwać albo formularza XML.

Przy użyciu stałej przypisań

A ciąg stałą mogą być używane w przypadku wystąpienie xml oczekiwany typ danych.Jest to wprost ODDANYCH ciąg 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/>'

Poprzedni przykład niejawnie konwertuje ciąg xml typ danych i przypisuje go do xml typu zmiennej.

Poniższy przykład ilustruje wstawienie stała 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>') 

Ostrzeżenie

Pismo XML XML jest sprawdzana określonego schematu.Aby uzyskać więcej informacji, zobacz XML wpisywanych w porównaniu do pliku XML bez typu.

Obciążenia luzem

Ulepszone OPENROWSET (języka Transact-SQL) funkcja umożliwia ładowanie zbiorcze dokumentów XML w bazie danych.Możesz ładowanie zbiorcze wystąpienia XML z plików do xml wpisz kolumn w bazie danych.Dla próbek pracy, zobacz Przykłady luzem, importowanie i eksportowanie dokumentów XML.Aby uzyskać więcej informacji na temat ładowania dokumentów XML, zobacz Ładowanie danych XML.

W tej sekcji

Temat

Opis

Pobieranie danych XML

Opis części XML wystąpienia, które nie są zachowywane, gdy są one przechowywane w bazach danych.