Aracılığıyla paylaş


XML sorgu seçenekleri ve korunan veriler

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiMicrosoft Fabric'te SQL veritabanı

Bu makalede, XML verilerini sorgulamak için belirtmeniz gereken sorgu seçenekleri açıklanmaktadır. Ayrıca, XML örneklerinin veritabanlarında depolandığında korunmamış bölümlerini de açıklar.

Gerekli sorgu seçeneklerini ayarlama

Xml veri türü yöntemlerini kullanarak xml türü sütunlarını veya değişkenlerini sorguladığınızda, aşağıdaki seçenekler gösterildiği gibi ayarlanmalıdır.

SET Seçenekleri Gerekli Değerler
ANSI_NULLS ON
ANSI_PADDING ON
ANSI_WARNINGS ON
ARITHABORT ON
CONCAT_NULL_YIELDS_NULL ON
SAYISAL_YUVARLAMADURDUR OFF
TIRNAKLI_BELİRLEYİCİ ON

Seçenekler gösterildiği gibi ayarlanmamışsa , xml veri türü yöntemlerindeki sorgular ve değişiklikler başarısız olur.

Xml örneğinin korunmamış özellikleri

SQL Server, XML örneğinin içeriğini korur, ancak XML örneğinin XML veri modelinde önemli kabul edilmeyen yönlerini korumaz. Bu, alınan bir XML örneğinin sunucuda depolanan örnekle aynı olmayabileceği, ancak aynı bilgileri içerebileceği anlamına gelir.

XML bildirimi

Örnekteki XML bildirimi, örnek veritabanında depolandığında korunmaz. Örneğin:

CREATE TABLE T1 (Col1 int primary key, Col2 xml);
GO
INSERT INTO T1 values (1, '<?xml version="1.0" encoding="windows-1252" ?><doc></doc>');
GO
SELECT Col2
FROM T1;

Sonuç <doc/>.

GIBI <?xml version='1.0'?>XML bildirimi, XML verilerini bir xml veri türü örneğinde depolarken korunmaz. Bu tasarım gereğidir. Xml bildirimi () ve öznitelikleri (sürüm/kodlama/tek başına) veriler xml türüne dönüştürüldükten sonra kaybolur. XML bildirimi, XML ayrıştırıcısına yönelik bir yönerge olarak değerlendirilir. XML verileri dahili olarak ucs-2 olarak depolanır. XML örneğindeki diğer tüm PI'ler korunur.

Öznitelik sırası

XML örneğindeki özniteliklerin sırası korunmaz. Xml türü sütununda depolanan XML örneğini sorguladığınızda, sonuçta elde edilen XML'deki özniteliklerin sırası özgün XML örneğinden farklı olabilir.

Öznitelik değerlerinin etrafındaki tırnak işaretleri

Öznitelik değerlerinin etrafındaki tek ve çift tırnak işaretleri korunmaz. Öznitelik değerleri veritabanında ad ve değer çifti olarak depolanır. Tırnak işaretleri depolanmaz. XML örneğine karşı bir XQuery çalıştırıldığında, üretim sonucu elde edilen XML, öznitelik değerlerinin çevresinde çift tırnak işaretleri ile serileştirilir.

DECLARE @x xml;
-- Use double quotation marks.
SET @x = '<root a="1" />';
SELECT @x;
GO
DECLARE @x xml;
-- Use single quotation marks.
SET @x = '<root a=''1'' />';
SELECT @x;
GO

Her iki sorgu da = <root a="1" />döndürür.

Ad alanı ön ekleri

Ad alanı ön ekleri korunmaz. Xml türündeki bir sütunda XQuery belirttiğinizde, serileştirilmiş XML sonucu farklı ad alanı ön ekleri döndürebilir.

DECLARE @x xml;
SET @x = '<ns1:root xmlns:ns1="abc" xmlns:ns2="abc">
            <ns2:SomeElement/>
          </ns1:root>';
SELECT @x;
SELECT @x.query('/*');
GO

Sonuçtaki ad alanı ön eki farklı olabilir. Örneğin:

<p1:root xmlns:p1="abc"><p1:SomeElement/></p1:root>

Ayrıca bakınız