FOR XML Support for the xml Data Type
Jeśli FOR XML kwerendy określa kolumna XML typu w klauzula SELECT wartości kolumna są mapowane jako elementy XML zwrócone, niezależnie od tego, czy należy określić w dyrektywie elementów.Wszelkie deklaracja XML w XML typu kolumna nie jest seryjny.
Na przykład, poniższa kwerenda pobiera odbiorcy informacje kontaktowe, takie jak kolumna ContactID, imię i nazwisko oraz numery telefonów z AdditionalContactInfo kolumnaXML typu.
SELECT ContactID, FirstName, LastName, AdditionalContactInfo.query('
declare namespace act="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ContactTypes";
//act:telephoneNumber/act:number
') AS PhoneNumber
FROM Person.Contact
FOR XML AUTO, TYPE
Ponieważ kwerenda nie określa dyrektywę elementów, wartości kolumn są zwracane w postaci atrybutów, z wyjątkiem wartości dodatkowych informacji kontaktowych pobierane z XML typu kolumna.Są one zwracane jako elementy.
Jest to wynik częściowy:
<Contact ContactID="1" FirstName="Syed" LastName="Abbas">
<act:number xmlns:act=
"http://schemas.adventure-works.com/AdditionalContactTypes">
111-111-1111</act:number>
<act:number xmlns:act=
"http://schemas.adventure-works.com/AdditionalContactTypes">
112-111-1111</act:number>
</Contact>
<Contact ContactID="2" FirstName="Catherine" LastName="Abel">
...
</Contact>
...
Jeśli zostanie określony alias kolumna dla kolumna XML wygenerowany przez XQuery, które alias służy do dodawania element otoki wokół XML wygenerowany przez XQuery.Na przykład poniższa kwerenda określa MorePhoneNumbers jako alias kolumna:
SELECT ContactID, FirstName, LastName, AdditionalContactInfo.query('
declare namespace act="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ContactTypes";
//act:telephoneNumber/act:number
') as MorePhoneNumbers
FROM Person.Contact
FOR XML AUTO, TYPE
Kod XML zwrócone przez XQuery jest otoczona <MorePhoneNumbers> element, jak pokazano na następujące wyniki częściowe:
<Contact ContactID="1" FirstName="Syed" LastName="Abbas">
<MorePhoneNumbers>
<act:number xmlns:act="http://schemas.adventure-works.com/AdditionalContactTypes">111-111-1111</act:number>
<act:number xmlns:act="http://schemas.adventure-works.com/AdditionalContactTypes">112-111-1111</act:number>
</MorePhoneNumbers>
</Contact>
<Contact ContactID="2" FirstName="Catherine" LastName="Abel">
<MorePhoneNumbers>
...
</MorePhoneNumbers>
</Contact>
...
Jeśli określisz dyrektywa elementów w kwerendzie zostaną zwrócone ContactID, nazwisko i imię, jako elementy w wynikowym pliku XML.
Poniższy przykład pokazuje, że logiki przetwarzania FOR XML nie serializować wszelkich deklaracji XML w danych XML z XML typ kolumna:
create table t(i int, x xml)
go
insert into t values(1, '<?xml version="1.0" encoding="UTF-8" ?>
<Root SomeID="10" />')
select i, x
from t
for xml auto
Jest to wynik.W wyniku deklaracja XML <?xml version="1.0" encoding="UTF-8" ?> nie jest seryjny.
<root>
<t i="1">
<x>
<Root SomeID="10" />
</x>
</t>
</root>
Zwracanie XML z funkcja zdefiniowanych przez użytkownika
DO XML kwerendy mogą służyć do zwracania XML z funkcja zdefiniowanej przez użytkownika, która zwraca jedną z następujących czynności:
Tabela z jednym XML Kolumna typu
Wystąpienie XML type
Na przykład poniższa funkcja zdefiniowana przez użytkownika zwraca tabela z pojedynczej kolumna XML type:
CREATE FUNCTION MyUDF (@ProudctModelID int)
RETURNS @T TABLE
(
ProductDescription xml
)
AS
BEGIN
INSERT @T
SELECT CatalogDescription.query('
declare namespace PD="https://www.adventure-works.com/schemas/products/description";
//PD:ProductDescription ')
FROM Production.ProductModel
WHERE ProductModelID = @ProudctModelID
RETURN
END
Można wykonać funkcja zdefiniowanej przez użytkownika i kwerendy tabela zwrócone przez nią.W tym przykładzie zwracane przez kwerendy w tabela Kod XML jest przypisany do XML typu zmiennej.
declare @x xml
set @x = (SELECT * FROM MyUDF(19))
select @x
Jest to inny przykład funkcja zdefiniowanej przez użytkownika.Ta funkcja zdefiniowana przez użytkownika zwraca wystąpienie XML typu.W tym przykładzie funkcja zdefiniowanej przez użytkownika zwraca wpisywanych wystąpienie XML, ponieważ obszar nazw schematu jest określona.
drop function MyUDF4
go
CREATE FUNCTION MyUDF4 (@ProductModelID int)
RETURNS xml ([Production].[ProductDescriptionSchemaCollection])
AS
BEGIN
declare @x xml
set @x = ( SELECT CatalogDescription
FROM Production.ProductModel
WHERE ProductModelID = @ProductModelID )
return @x
END
Kod XML zwróconych przez funkcja zdefiniowaną przez użytkownika można przypisać do XML wpisz zmienną w następujący sposób:
declare @x xml
SELECT @x= dbo.MyUDF4 (19)
select @x