Aracılığıyla paylaş


TÜR Direktif for xml sorguları

İle başlayan SQL Server 2005, SQL ServerDestek xml veri türü isteğe bağlı olarak for xml sorgu sonucu olarak döndürülen isteğine sağlar xmltype yönergesi belirterek veri türü. Böylece, sunucu for xml sorgu sonucu işlemek. Örneğin, buna karşı bir XQuery belirtin, sonucu atama bir xmltürü değişkeni, ya da yaz iç içe for xml sorguları.

[!NOT]

SQL Serverxml veri türü örneği verilerini farklı sunucu-yapıları sonucu istemciye type yönergesi kullanan for xml sorguları gibi ya da nerede döner xmlveri türü xml örneği veri değerleri sql tablo sütunlarından ve çıkış parametreleri kullanılır. İstemci uygulama kodu, ado.AĞ sağlayıcısı, ikili bir sunucudan kodlama gönderilmek üzere bu xml veri türü bilgileri ister. Ancak, for xml türü yönergesi kullanıyorsanız, xml verilerini dize türü olarak geri geliyor. Her durumda, istemci sağlayıcısı her zaman XML form ele almak mümkün olacaktır. İmleçler ile üst düzey for xml türü yönergesi olmadan kullanılamayacağını unutmayın.

Örnekler

Aşağıdaki örnekler, type Direktif for xml sorguları ile kullanımını göstermektedir.

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

Müşteri ilgili kişi bilgileri aşağıdaki sorgu alır Contactstablosu. Çünkü TYPEyönergesi belirtilen FOR XML, sonuç olarak döndürülen xmltürü.

USE AdventureWorks2012;
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"/>

...

Atama for xml sorgu sonuçları bir xml türü değişkeni

Aşağıdaki örnek, bir for xml sonuç atanmış bir xmltürü değişkeni, @x. Gibi iletişim bilgilerini sorgu alır BusinessEntityID, FirstName, LastNameek telefon numaralarını, dan AdditionalContactInfosütun xml TYPE. Çünkü FOR XMLyan belirtir TYPExml döndürülür yönergesi, xmlyazın ve bir değişkene atanır.

USE AdventureWorks2012;
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, uygulayabileceğiniz xmlgibi yöntemler, yazın query()ve value(), for xml sorgu tarafından döndürülen xml sonuç.

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

USE AdventureWorks2012;
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 XMLdöndürür sorgu bir xmlyazın sonucu hangi dış SELECTgeçerli query()yöntem xmltürü. Not TYPEyönergesi belirtilen.

Sonuç şudur:

<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öntemi xmlveri türü bir değer tarafından döndürülen xml sonuç almak için kullanılan SELECT…FOR XMLsorgusu. Daha fazla bilgi için, bkz. value() yöntemi (xml veri türü).

USE AdventureWorks2012;
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 ifadesi value()yöntemi alır bir müşterinin ilk telefon numarasını kişi olan BusinessEntityIDolan 1.

[!NOT]

type yönergesi belirtilmezse, for xml sorgu sonucu türü olarak döndürülen nvarchar(max).

INSERT, update ve delete (Transact-sql dml) kullanarak for xml sorgu sonuçları

Aşağıdaki örnek, Data Manipulation Language (dml) deyimleri for xml sorguları nasıl kullanılabileceğini gösterir. Örnekte, FOR XMLbir örneğini verir xmltürü. INSERTDeyimi ekler bu xml tablo.

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

Ayrıca bkz.

Başvuru

xml (SQL Server)