Aracılığıyla paylaş


XML verilerini yükleme

Şunlar için geçerlidir:SQL ServerAzure SQL DatabaseMicrosoft Fabric'te SQL veritabanı

XML verilerini SQL Server'a çeşitli yollarla aktarabilirsiniz. Mesela:

  • Verileriniz SQL Server veritabanında [n]metin veya görüntü sütunundaysa, Integration Services'ı kullanarak tabloyu içeri aktarabilirsiniz. ALTER TABLE deyimini kullanarak sütun türünü XML olarak değiştirin.

  • Bcp out kullanarak verilerinizi başka bir SQL Server veritabanından toplu olarak kopyalayabilir ve ardından bcp in kullanarak verileri toplu olarak sonraki sürümdeki veritabanına ekleyerek yükleyebilirsiniz.

  • SQL Server veritabanında ilişkisel sütunlarda verileriniz varsa, [n]metin sütunu ve isteğe bağlı olarak satır tanımlayıcısı için birincil anahtar sütunu içeren yeni bir tablo oluşturun. FOR XML ile sunucuda oluşturulan XML'yi almak ve [n]metin sütununa yazmak için istemci tarafı programlamayı kullanın. Ardından, verileri daha sonraki bir sürüm veritabanına aktarmak için daha önce bahsedilen teknikleri kullanın. XML'yi doğrudan sonraki sürüm veritabanındaki bir XML sütununa yazmayı seçebilirsiniz.

XML verilerini toplu yükleme

SQL Server'ın bcp gibi toplu yükleme özelliklerini kullanarak XML verilerini sunucuya toplu yükleyebilirsiniz. OPENROWSET, dosyalardan bir XML sütununa veri yüklemenize olanak tanır. Aşağıdaki örnekte bu nokta gösterilmektedir.

Örnek: Dosyalardan XML yükleme

Bu örnekte T tablosuna nasıl satır ekleyebileceğiniz gösterilmektedir. XML sütununun değeri dosya C:\MyFile\xmlfile.xml CLOB olarak yüklenir ve tamsayı sütununa 10 değeri verilir.

INSERT INTO T
SELECT 10, xCol
FROM    (SELECT *
    FROM OPENROWSET (BULK 'C:\MyFile\xmlfile.xml', SINGLE_BLOB)
AS xCol) AS R(xCol);

Metin kodlama

SQL Server XML verilerini Unicode (UTF-16) olarak depolar. Sunucudan alınan XML verileri UTF-16 kodlamasında ortaya çıkar. Farklı bir kodlama istiyorsanız, alınan verilerde gerekli dönüştürmeyi gerçekleştirmeniz gerekir. Bazen XML verileri farklı bir kodlamada olabilir. Bu durumda, veri yükleme sırasında dikkatli olmanız gerekir. Mesela:

  • Metin XML'niz Unicode (UCS-2, UTF-16) içindeyse, bunu herhangi bir sorun yaşamadan bir XML sütununa, değişkenine veya parametresine atayabilirsiniz.

  • Kodlama Unicode değilse ve örtükse, kaynak kod sayfası nedeniyle, veritabanındaki dize kodu sayfası yüklemek istediğiniz kod noktalarıyla aynı veya uyumlu olmalıdır. Gerekirse COLLATE kullanın. Böyle bir sunucu kodu sayfası yoksa, doğru kodlamaya sahip açık bir XML bildirimi eklemeniz gerekir.

  • Açık kodlama kullanmak için kod sayfalarıyla etkileşimi olmayan varbinary() türünü veya uygun kod sayfasının dize türünü kullanın. Ardından, verileri bir XML sütununa, değişkenine veya parametresine atayın.

Örnek: Açıkça bir kodlama belirtin

Açık XML bildirimi olmayan varchar(max) olarak depolanan bir XML belgeniz (vcdoc) olduğunu varsayalım. Aşağıdaki ifadede, "iso8859-1" kodlamasına sahip bir XML bildirimi eklenir, XML belgesi birleştirilir, sonuç bayt gösteriminin korunması için varbinary(max)'e dönüştürülür ve son olarak XML'ye dönüştürülür. Bu, XML işlemcisinin verileri belirtilen "iso8859-1" kodlamasına göre ayrıştırıp dize değerleri için karşılık gelen UTF-16 gösterimini oluşturmasını sağlar.

SELECT CAST(
CAST (('<?xml version="1.0" encoding="iso8859-1"?>'+ vcdoc) AS VARBINARY (MAX))
AS XML);

Dize kodlama uyumsuzlukları

XML'yi SQL Server Management Studio'daki Sorgu Düzenleyicisi penceresine dize değişmez değeri olarak kopyalayıp yapıştırırsanız, [n]varchar dize kodlama uyumsuzlukları ile karşılaşabilirsiniz. Bu, XML örneğinizin kodlamasını temel alır. Çoğu durumda XML bildirimini kaldırmak isteyebilirsiniz. Mesela:

<?xml version="1.0" encoding="UTF-8"?>
  <xsd:schema ...

Ardından XML örneğini Unicode örneği yapmak için dizeye bir N öneki vermelisiniz. Mesela:

-- Assign XML instance to a variable.
DECLARE @X XML
SET @X = N'...'
-- Insert XML instance into an xml type column.
INSERT INTO T VALUES (N'...')
-- Create an XML schema collection
CREATE XML SCHEMA COLLECTION XMLCOLL1 AS N'<xsd:schema ... '

Ayrıca bkz.