Aracılığıyla paylaş


for xml sorgu türü yönergesi

De SQL Server 2000, for xml sorgu sonucu her zaman doğrudan döndürülen istemci metinsel forma.İle başlayan SQL Server 2005, SQL Server Destek xml veri türü isteğe bağlı olarak bir for xml sorgu sonucu olarak verilmesi isteğini etkinleştirir xml veri türü belirterek type yönergesi.Böylece, sunucu üzerindeki for xml sorgu sonucu işlemek.Örneğin, bir XQuery karşı bunu belirtmek, sonuca ata bir xml türü değişkeni veya yazma iç içe for xml sorguları.

Not

SQL Serverxml veri türü örnek verilerini döndürür istemci sonucunda farklı sunucu-gibi türü yönergesini kullanan xml sorguları gibi yapıları gibi veya bir yerde xml veri türü kullanılır xml örnek veri değerleri sql tablo sütunları ve çıkış parametreleri.istemci uygulama kodu, ado.net olarak sağlayıcı, bu xml veri türü bilgilerini bir ikili sunucudan kodlamada gönderilmesini ister.for xml türü yönergesi kullanıyorsanız, Bununla birlikte, xml verisi olarak bir dize türü gelir.Herhangi durum, istemci sağlayıcı ya da formun XML işleyebilen her zaman olacaktır.Not imleç ile üst düzey for xml türü yönergesi olmadan kullanılamaz.

Örnekler

Aşağıdaki örnekler tür Direktif for xml sorguları ile kullanımını göstermektedir.

Xml türü alınıyor for xml sorgu sonuçlar

Müşteri ilgili kişi bilgileri aşağıdaki sorgu alır Contacts tablo.Çünkü TYPE yönergesi içinde belirtilen FOR XMLsonucu olarak döndürülür, xml türü.

USE AdventureWorks2008R2;
Go
SELECT BusinessEntityID, FirstName, LastName
FROM Person.Person
ORDER BY BusinessEntityID
FOR XML AUTO, TYPE;

Bu kısmi bir sonucudur:

<Person.Person BusinessEntityID="1" FirstName="Ken" LastName="Sánchez"/>

<Person.Person BusinessEntityID="2" FirstName="Terri" LastName="Duffy"/>

...

Bir xml türü değişkeni için atama for xml sorgu sonuçlar

Aşağıdaki örnekte, for xml sonuç atanmış bir xml türü değişkeni @x.The query retrieves contact information, such as the BusinessEntityID, FirstName, LastName, and additional telephone numbers, from the AdditionalContactInfo column of xmlTYPE.Çünkü FOR XML yan tümce tümce tümce belirler TYPE yönergesi, xml olarak döner xml yazın ve atandı değişken.

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

for xml sorgu sonuçlar sorgulama

xml for xml sorguları döndürür.Bu nedenle, geçerli xml gibi yöntemler, yazın query() ve value(), xml sonuç verdi tarafından for xml sorguları.

Aşağıdaki sorgu, query() yöntem, xml sonucu sorgulamak için kullanılan veri türü FOR XML sorgu.Daha fazla bilgi için bkz: Query() yöntemi (xml veri türü).

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]');

İç SELECT … FOR XML döndürür sorgu bir xml sonucu olan yazın dış SELECT uygulanan query() yöntem için xml türü.Not TYPE yönergesi belirtilen.

Bu sonucu verir:

<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>

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

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;

XQuery yol ifade , value() yöntem alır bir müşterinin ilk telefon numarasını whose kişi BusinessEntityID olan 1.

Not

type yönergesi belirtilmezse, for xml sorgu sonucu tipi iade edilen nvarchar(max).

Using for xml sorgu sonuçlar ekleme, güncelleştirme ve silme (Transact-sql dml)

Aşağıdaki örnekte, veri düzenleme dili (dml) deyimi for xml sorguları nasıl kullanılabileceği gösterilmiştir.Örnekte, FOR XML döndüren bir örnek , xml türü.The INSERT statement inserts this XML into a table.

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