Share via


TYPE yönergesini FOR XML sorgulardaki

Içinde SQL Server 2000, FOR XML sorgu sonucu her zaman doğrudan döndürülür istemci metin biçiminde. Ile başlayan SQL Server 2005, SQL Server Destek XML veri türü isteğe bağlı olarak FOR XML sorgunun sonuç döndürülmesi isteğine etkinleştirirXML veri TÜRÜ yönergesini belirterek yazın.Bu sunucuda FOR XML sorgu sonucu işlem sağlar.Örneğin, karşı bir XQuery belirtin, sonucu atamak bir XML değişkeni yazın veya yazmaFOR Nested XML sorguları.

Not

SQL Server FOR XML TÜRÜ yönergesini kullanan sorgular gibi veya burada sonucunda, farklı sunucu yapıları istemcisine örnek verileri, XML veri türü verir xml veri türü, XML örneği veri SQL tablo sütunlarından dönüş ve parametre çıkış için kullanılır. Istemci uygulama kodu, ADO.NET sağlayıcı bu XML veri türü bilgileri bir ikili sunucudan kodlamayla yeniden gönderilmesini ister.TYPE yönergesini FOR XML kullanıyorsanız, ancak, XML verilerini bir dize türü gelir.Her durumda, istemci sağlayıcı her zaman XML ya da bir formu işlemek mümkün olacaktır.En üst düzey IÇIN XML TÜRÜ yönergesini olmadan imleçlerle kullanılamaz olduğunu unutmayın.

Örnekler

Aşağıdaki örnekler IÇIN XML sorgularla TYPE yönergesinin kullanımı gösterilmektedir.

FOR alınıyor XML sorgu sonuçlar xml türü

Aşağıdaki sorgu kişileri müşteri ilgili kişi bilgileri alır tablo.TYPE yönergesi IÇIN XML olarak belirtildiğinden, sonuç olarak döner XML türü.

SELECT ContactID, FirstName, LastName, Phone
FROM Person.Contact
ORDER BY ContactID
FOR XML AUTO, TYPE

Bu kısmi kaynaklanır:

<Contact ContactID="1" FirstName="Syed" LastName="Abbas" 
         Phone="398-555-0132"/>
<Contact ContactID="2" FirstName="Catherine" LastName="Abel" 
         Phone="747-555-0171"/>
...

Bir xml türü değişkeni FOR assigning XML sorgu sonuçlar

Aşağıdaki örnekte, FOR XML sonucu atanmış bir XML türü değişkeni, @ x.Sorgu, başvuru bilgileri için ilgili kişi kimliği, ad, soyadı ve ek telefon numaraları gibi AdditionalContactInfo sütundan alır. XML TYPE.TYPE yönergesi IÇIN XML yan tümce belirtir çünkü XML olarak döndürülen XML türü ve bir değişkene atanır.

DECLARE @x XML
SET @x = (
   SELECT ContactID, 
          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.Contact
   FOR XML AUTO, TYPE)
SELECT @x
GO

Sorgulama IÇIN XML sorgu sonuçlar

Sorgular IÇIN XML, XML döndürür.Bu nedenle, uygulama XML gibi türü yöntemleriQuery() and **Value()**FOR XML sorgu tarafından döndürülen XML sonuca.

Aşağıdaki sorguda Query() yöntemXML veri türü IÇIN XML sorgunun sonucunu sorgulamak için kullanılır.Daha fazla bilgi için bkz:Query() Yöntem (xml veri türü).

SELECT (SELECT ContactID, 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.Contact
FOR XML AUTO, TYPE).query('/Person.Contact[1]')

Iç sorgunun SELECT... IÇIN XML döndüren bir XML türü sonuç için dış SELECT uygularQuery() yöntemXML türü.Belirtilen TÜR yönergesini unutmayın.

Bu sonucu oluşur:

<Person.Contact ContactID="1" FirstName="Gustavo" LastName="Achong">
  <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.Contact>

Aşağıdaki sorguda Value() yöntemXML veri türü, bir değer SELECT…FOR XML sorgu tarafından döndürülen XML sonucu almak için kullanılır.Daha fazla bilgi için bkz:Value() Yöntem (xml veri türü).

declare @FirstPhoneFromAdditionalContactInfo varchar(40);
SELECT @FirstPhoneFromAdditionalContactInfo = 
 ( SELECT ContactID, 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.Contact Contact
   FOR XML AUTO, TYPE).value('
declare namespace act="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ContactTypes";
  /Contact[@ContactID="1"][1]/PhoneNumbers[1]/act:number[1]', 'varchar(40)'
 )
select @FirstPhoneFromAdditionalContactInfo

XQuery yol ifadesi içinde Value() yöntem, ilgili kişi kimliği 1 olan bir müşteri irtibat kişisinin ilk telefon numarasını alır.

Not

TYPE yönergesini belirtilmezse, sorgu sonucu IÇIN XML türü olarak döndürdü nvarchar(max).

FOR XML kullanarak sorgu sonuçlarında INSERT, UPDATE ve DELETE (Transact-SQL DML)

Aþaðýdaki örnek, veri işleme Language (DML) deyimlerinde FOR XML sorguları nasıl kullanılabileceğini gösterir.Bu örnekte, FOR XML örnek verir. XML türü.INSERT deyim, bu XML tabloya ekler.

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

See Also

Reference