Share via


xml örnekleri oluşturuluyor

Açıklandığı gibi xml veri türü, xml örnekleri de saklayabilirsiniz bir SQL Server veritabanı.Bu konuda xml örnekleri oluşturmak nasıl açıklar.

De SQL Server, xml örnekleri aşağıdaki şekillerde oluşturabilirsiniz:

  • dize örnekleri vuran türü.

  • deyim, for xml yan tümce tümce tümce ile kullanma.

  • Sabit atamaları kullanıyor.

  • toplu yükleme kullanma.

Dize ve ikili örnekleri vuran türü

You can parse any of the SQL Server string data types, such as [n][var]char, [n]text, varbinary,and image, into the xml data type by casting (CAST) or converting (CONVERT) the string to the xml data type.Untyped xml iyi biçimlendirilmiş onaylamak için kontrol edilir.Bir şema varsa ilişkili xml türü, doğrulama de gerçekleştirilir.Daha fazla bilgi için bkz: Yazılı xml Untyped xml karşılaştırılması.

xml belgeleri kodlanmış farklı kodlamaları ile (örneğin, utf-8, utf-16, windows-1252).Dize ve ikili kaynak türleri xml belgesi kodlama ile nasıl etkileşim ve ayrıştırıcı nasıl davranacağını kuralları aşağıda özetlenmektedir.

Bu yana nvarchar iki baytlık unicode varsayar bir iki baytlık Unicode olarak kodlanmış xml belgesi veya parça olarak utf-16 veya ucs-2 gibi kodlama, xml Ayrıştırıcısı dize değeri kabul edecektir.Bu xml belgesi iki baytlık Unicode olarak kodlanmış gerektiğini de kaynak veri türü ile uyumlu olacak şekilde kodlama demektir.utf-16 kodlanmış xml belge utf-16 bayt sırası işareti (bom) sahip olabilir, ancak bunun için gerekli değildir, kaynak türü bağlamında kolaylaştırır beri belge, iki baytlık Unicode yalnızca olabilir düz kodlanmış.

İçeriği bir varchar dize xml parser tarafından bir bir baytlık kodlanmış xml belge/parçası kabul.Bu yana varchar kaynak dize bir cinsi olan ilişkili sayfana parser kullanacak açık bir kodlama xml biçiminde bir xml örnek ürün Reçetesi varsa veya bir kodlama bildirim, ürün Reçetesi veya bildirim aþaðýdaki kod sayfa ile tutarlı olması gerekiyor, belirtilmezse kodlama için bu kod sayfa, aksi takdirde ayrıştırıcı hata bildirir.

İçeriğini varbinary doğrudan xml Ayrıştırıcı için geçen codepoint akışı olarak kabul edilir.Bu nedenle, xml belgesi veya parça ürün Reçetesi veya diğer kodlama bilgisi satır içi sağlaması gerekir.Çözümleyici sadece kodlamayı belirlemeye akışına bakar.Başka bir deyişle, utf-16 ürün Reçetesi sağlamak için xml gereksinimlerini utf-16 kodlanmış ve örnek ürün Reçetesi ve bir kodlama bildirim olmadan utf-8 olarak yorumlanacaktır.

xml belgesi kodlama önceden bilinmiyor ve veri iletilir dize veya ikili veriler xml verilerini çevrim önce yerine xml, veri işleme biçimi için önerilir, varbinary.Örneğin, veri OpenRowset() kullanarak bir xml dosyasından okunurken biri olarak okunacak verinin belirtmeniz gerekir bir varbinary(max) değeri:

select CAST(x as XML) 
from OpenRowset(BULK 'filename.xml', SINGLE_BLOB) R(x)

SQL Server Dahili xml kodlama utf-16 kullanan bir verimli ikili gösterimini temsil eder.Kullanıcı tarafından sağlanan kodlama korunmaz, ancak ayrıştırma işlemi sırasında kabul edilir.

Vuran clr kullanıcı tanımlı türler yazın

Bir CLR kullanıcı tanımlı tür xml Serialization varsa, bu tür örnekleri bir xml veri türü için açıkça çevirebilirsiniz.Yazılı bir clr kullanıcı tanımlı xml seri hale getirme işlemi hakkında daha fazla bilgi için bkz: clr veritabanı Objects'in xml seri hale getirme.

Beyaz boşluk yazılan XML'de işleme

De SQL Server, beyaz boşluk içinde öğe içeriği beyaz boşluk-yalnızca karakter veri biçimlendirme tarafından ayrılmış bir sıra içinde oluştuğunda anlamsız değerlendirilir, başlamak ya da bitirmek gibi etiketler ve değil entitized.(cdata bölümleri dikkate alınmaz.) Bu işleme beyaz boşluk işleme nasıl boşluk World Wide Web Consortium (W3C) tarafından yayımlanan xml 1.0 belirtimine açıklanan dan farklıdır.Bu, çünkü xml inceleyicisinde SQL Server xml 1. 0 ' tanımlandığı gibi yalnızca sınırlı sayıda dtd alt kümelerine kýsayollar tanır.Desteklenen sınırlı dtd alt kümelerine kýsayollar hakkında daha fazla bilgi için SQL Server, bkz: CAST ve CONVERT (Transact-SQL).

Aşağıdakilerden biri doğru olduğunda dize verileri xml biçimine dönüştürür, varsayılan olarak, xml Ayrıştırıcısı anlamsız beyaz boşluk atar:

  • The xml:spacebir öğe üzerinde öznitelik tanımlı değil veya kendi üst öğeleri.

  • The xml:space attribute in effect on an element, or one of its ancestor elements, has the value of default.

Örneğin:

declare @x xml
set @x = '<root>      <child/>     </root>'
select @x 

Bu sonucu verir:

<root><child/></root>

Ancak, bu davranışı değiştirebilirsiniz.DÖNÜŞTÜRME işleç ve, isteğe bağlı bir dt xml örnek için beyaz boşluk korumak için kullanmak Stil parametresi küme için 1 değeri.Örneğin:

SELECT CONVERT(xml, N'<root>      <child/>     </root>', 1)

If the style parameter is either not used or its value is set to 0, insignificant white space is not preserved for the conversion of the xml DT instance.DÖNÜŞTÜRME işleç kullanma hakkında daha fazla bilgi için ve kendi Stil dt xml örnekleri için dize verileri dönüştürürken parametre bakın CAST ve CONVERT (Transact-SQL).

Örnek: Bir dize değeri yazılı XML artığını ve bir sütun atayın

Aşağıdaki örnek için bir xml parçası içeren bir dize değişkeni bıraktığı xml verileri yazın ve bunun içinde saklayan xml türü sütun:

CREATE TABLE T(c1 int primary key, c2 xml)
go
DECLARE  @s varchar(100)
SET @s = '<Cust><Fname>Andrew</Fname><Lname>Fuller</Lname></Cust>' 

Aşağıdaki ekleme işlemini örtülü olarak dönüştürür bir dize için xml türü:

INSERT INTO T VALUES (3, @s) 

Açıkça cast() dize olarak yapabilecekleriniz xml türü:

INSERT INTO T VALUES (3, cast (@s as xml))

Ya da convert(), aşağıdaki gösterildiği gibi kullanabilirsiniz:

INSERT INTO T VALUES (3, convert (xml, @s)) 

Örnek: Yazılı xml için bir dize dönüştürmek ve bir değişkene atar

Aşağıdaki örnekte, bir dize için dönüştürülen xml yazın ve bir değişken için atanmış xml veri türü:

declare @x xml
declare  @s varchar(100)
SET @s = '<Cust><Fname>Andrew</Fname><Lname>Fuller</Lname></Cust>' 
set @x =convert (xml, @s)
select @x

select deyimi, bir for xml yan tümcesi ile kullanma

sonuçlar xml olarak döndürmek için bir deyim for xml yan tümce tümce tümce kullanabilirsiniz.Örneğin:

DECLARE @xmlDoc xml
SET @xmlDoc = (SELECT Column1, Column2
               FROM   Table1, Table2
               WHERE   Some condition
               FOR XML AUTO)
 ...

deyim için atama sırasında sonra ayrıştırıldı metinsel bir xml parçası döndürür xml veri türü değişkeni.

Ayrıca type yönergesi doğrudan for xml sorgu sonucu verir for xml yan tümce tümce tümcesinde xml türü:

Declare @xmlDoc xml
SET @xmlDoc = (SELECT ProductModelID, Name
               FROM   Production.ProductModel
               WHERE  ProductModelID=19
               FOR XML AUTO, TYPE)
SELECT @xmlDoc

Bu sonucu verir:

<Production.ProductModel ProductModelID="19" Name="Mountain-100" />...

Aşağıdaki örnekte, yazılı xml for xml sorgu sonucu eklendiğinde bir xml türü sütun:

CREATE TABLE T1 (c1 int, c2 xml)
go
INSERT T1(c1, c2)
SELECT 1, (SELECT ProductModelID, Name
           FROM Production.ProductModel
           WHERE ProductModelID=19
           FOR XML AUTO, TYPE)
SELECT * FROM T1
go

for xml hakkında daha fazla bilgi için bkz: xml for xml kullanma oluşturmak yoluyla.

Not

SQL Serverdöner xml veri türü örnekleri istemci sonucunda farklı sunucu türü yönergesini kullanın for xml sorguları gibi yapıları gibi veya bir yerde xml veri türü xml sql sütunlar, değişkenler ve dönmek için kullanılırçıkış parametreleri. istemci uygulama kodu, ado.AĞ sağlayıcı ister bu xml veri türü bilgilerini gönderilmesini ikili kodlamadan server.Ancak, for xml türü yönergesi kullanıyorsanız, xml verilerini dize türünde döndürür.Herhangi durum, istemci sağlayıcı ya da formun XML işleyebilen her zaman olacaktır.

Sabit atamaları kullanma

Bir dize sabit örnek burada kullanılan xml veri türü beklenir.Bu zımni bir cast aynıdır dize XML.Örneğin:

DECLARE @xmlDoc xml
SET @xmlDoc = '<Cust><Fname>Andrew</Fname><Lname>Fuller</Lname></Cust>' 
-- Or
SET @xmlDoc = N'<?xml version="1.0" encoding="ucs-2"?><doc/>'

Önceki örnek örtülü olarak dönüştürür dize için xml verileri yazın ve atar bir xml türü değişkeni.

Aşağıdaki örnek, sabit bir dize içine ekler bir xml türü sütun:

CREATE TABLE T(c1 int primary key, c2 xml)
INSERT INTO T VALUES (3, '<Cust><Fname>Andrew</Fname><Lname>Fuller</Lname></Cust>') 

Not

Yazılı xml için xml belirtilen şema karşı doğrulanır.Daha fazla bilgi için bkz: Yazılı xml Untyped xml karşılaştırılması.

BULK Load kullanma

Geliştirilmiş openrowset (Transact-sql) işlevsellik sağlar, toplu yükleme veritabanında xml belgelerini.Yapabilirsiniz toplu yükleme xml dosyalarıyla örneklerden xml veritabanındaki sütunları yazın.Çalışma örnekleri için bkz: Toplu alma ve verme xml belgeleri örnekleri.xml belgeleri yükleme hakkında daha fazla bilgi için bkz: xml verilerini yükleme.

Bu Bölümde

Konu

Açıklama

xml verileri alma

Veritabanlarında depolandığında korunmaz xml örnekleri bölümlerini açıklar.