Typ dyrektywy w XML dla kwerend
W SQL Server 2000, wynik kwerendy XML dla zawsze bezpośrednio jest zwracana do klient w postaci tekstowej.Począwszy od SQL Server 2005, SQL Server Obsługa Typ danych xml umożliwia opcjonalnie wniosek, że zwracane jako wynik kwerendy XML dla xml Typ danych przez określenie typu dyrektywy.Umożliwia przetwarzanie wyników kwerendy dla XML na serwerze.Na przykład, określić XQuery przeciwko nim, przypisz wynik xml zapisu lub typu zmiennej kwerendy zagnieżdżone XML.
Ostrzeżenie
SQL ServerZwraca dane XML wpisz wystąpienie danych do klient z różnych konstrukcje serwera, takich jak XML dla kwerendy, należy użyć dyrektywy typu lub gdy xml Typ danych jest używane do zwracania wartości danych instancję XML z kolumny tabela SQL i parametry wyjściowe.W kodzie aplikacji klient, ADO.Dostawca netto żąda informacji typu danych XML wysłanych w kodowanie binarne z serwera.Jednakże jeśli używasz dla XML bez dyrektywy typ danych XML wróci jako typ ciąg.W każdym przypadek dostawca klient zawsze będzie obsługiwać albo formularza XML.Należy zauważyć, że najwyższego poziom dla XML bez dyrektywy typu nie można korzystać z kursorów.
Przykłady
Poniższe przykłady ilustrują stosowania dyrektywy typ XML dla kwerendy.
Wyniki kwerendy pobieranie dla XML jako typ xml
Następująca kwerenda pobiera informacje kontaktowe odbiorcy z Contacts tabela.Ponieważ TYPE dyrektywy jest określona w FOR XML, wyniki są zwracane jako xml typu.
USE AdventureWorks2008R2;
Go
SELECT BusinessEntityID, FirstName, LastName
FROM Person.Person
ORDER BY BusinessEntityID
FOR XML AUTO, TYPE;
Jest to wynik częściowy:
<Person.Person BusinessEntityID="1" FirstName="Ken" LastName="Sánchez"/>
<Person.Person BusinessEntityID="2" FirstName="Terri" LastName="Duffy"/>
...
Przypisywanie dla XML wyniki kwerendy do zmiennej typu xml
W poniższym przykładzie wynik dla XML jest przypisany do xml Typ zmiennej, @x.The query retrieves contact information, such as the BusinessEntityID, FirstName, LastName, and additional telephone numbers, from the AdditionalContactInfo column of xmlTYPE.Ponieważ FOR XML Określa klauzula TYPE dyrektywy, XML są zwracane jako xml Wpisz i przypisana do zmiennej.
USE AdventureWorks2008R2;
GO
DECLARE @x xml;
SET @x = (
SELECT BusinessEntityID,
FirstName,
LastName,
AdditionalContactInfo.query('
declare namespace aci="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ContactInfo";
declare namespace act="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ContactTypes";
//act:telephoneNumber/act:number') as MorePhoneNumbers
FROM Person.Person
FOR XML AUTO, TYPE);
SELECT @x;
GO
Badanie wyniki kwerendy XML dla
Kwerendy XML dla zwracają XML.Dlatego można zastosować xml Wpisz metod, takich jak query() i value(), w wyniku XML zwracane przez kwerendy dla XML.
W następującej kwerendzie query() metoda xml wynik kwerendy jest używany typ danych FOR XML kwerendy.Aby uzyskać więcej informacji, zobacz Query() metoda (xml typ danych).
USE AdventureWorks2008R2;
GO
SELECT (SELECT BusinessEntityID, FirstName, LastName, AdditionalContactInfo.query('
DECLARE namespace aci="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ContactInfo";
DECLARE namespace act="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ContactTypes";
//act:telephoneNumber/act:number
') AS PhoneNumbers
FROM Person.Person
FOR XML AUTO, TYPE).query('/Person.Person[1]');
Wewnętrzne SELECT … FOR XML kwerenda zwraca xml wpisz wynik, do którego zewnętrzne SELECT stosuje się query() metoda xml typu.Uwaga TYPE określonych dyrektywą.
Jest to wynikiem:
<Person.Person BusinessEntityID="1" FirstName="Ken" LastName="Sánchez">
<PhoneNumbers>
<act:number xmlns:act="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ContactTypes">111-111-1111</act:number>
<act:number xmlns:act="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ContactTypes">112-111-1111</act:number>
</PhoneNumbers>
</Person.Person>
W następującej kwerendzie value() metoda xml Typ danych jest używany, aby pobrać wartość wyniku XML zwróconych przez SELECT…FOR XML kwerendy.Aby uzyskać więcej informacji, zobacz Value() metoda (xml typ danych).
USE AdventureWorks2008R2;
GO
DECLARE @FirstPhoneFromAdditionalContactInfo varchar(40);
SELECT @FirstPhoneFromAdditionalContactInfo =
( SELECT BusinessEntityID, FirstName, LastName, AdditionalContactInfo.query('
declare namespace aci="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ContactInfo";
declare namespace act="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ContactTypes";
//act:telephoneNumber/act:number
') AS PhoneNumbers
FROM Person.Person Contact
FOR XML AUTO, TYPE).value('
declare namespace act="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ContactTypes";
/Contact[@BusinessEntityID="1"][1]/PhoneNumbers[1]/act:number[1]', 'varchar(40)'
)
SELECT @FirstPhoneFromAdditionalContactInfo;
Wyrażenie ścieżka XQuery w value() metoda pobiera pierwszy numer telefonu nabywcy kontaktu, którego BusinessEntityID jest 1.
Ostrzeżenie
Jeżeli nie określono typu dyrektywy, jako typ zwracany jest wynik kwerendy XML dla nvarchar(max).
Wyniki kwerendy za pomocą XML w INSERT, UPDATE i DELETE (DML języka Transact-SQL)
Poniższy przykład demonstruje, jak można używać kwerend dla XML w sprawozdaniu Data Manipulation Language (DML).W przykładzie FOR XML zwraca wystąpienie xml typu.INSERT instrukcja wstawia ten XML do tabela.
CREATE TABLE T1(intCol int, XmlCol xml);
GO
INSERT INTO T1
VALUES(1, '<Root><ProductDescription ProductModelID="1" /></Root>');
GO
CREATE TABLE T2(XmlCol xml)
GO
INSERT INTO T2(XmlCol)
SELECT (SELECT XmlCol.query('/Root')
FROM T1
FOR XML AUTO,TYPE);
GO