SQL sunucuda veri tabanı sorguladığımız gibi dış kaynaklardan, veri dosyalarını sorgulamamız mümkündür. Dış kaynaklara bağlantı için, tüm bağlantı bilgilerini OLE DB içinde barındırır. Aynı veri kaynağına sürekli bağlantı için SQL’in Linked Server özelliği kullanılmalıdır.
OPENROWSET işlevini bir tablo sorgular gibi kullanabiliriz. OLE DB sağlayıcısının yetenekleri doğrultusunda insert, update ve delete komutlarıyla birlikte de kullanılabilir. OPENROWSET komutunun Bulk veri okuma için de desteği vardır.
Sistemin lokalindeki bir xml’e bağlantı kurulacaksa yine lokaldeki SQL servisinden login olunmalıdır.
Veri dosyalarıyla bağlantı kurabilmek için SQL servisinin Ad Hoc Distributed Queries özelliğinin açılması gereklidir.
sp_configure 'show advanced options',1
reconfigure with override
go
sp_configure 'Ad Hoc Distributed Queries',1
reconfigure with override
GO
XML dosyası okumak için Ornek.XML Dosyası:
<?xml version="1.0" ?>
<Kok>
<Rapor id="1" Tipi="Sabit">
<Kodu>001</Kodu>
<Adi>Borc Yaslandirma</Adi>
</Rapor>
<Rapor id="2" Tipi="Dinamik">
<Kodu>002</Kodu>
<Adi>Musteri Listesi</Adi>
</Rapor>
</Kok>
XML veri okumak için iki farklı örnek kod aşağıda verilmiştir.
/* sp_xml_preparedocument Prosedüründe döküman sorgulayabilmek için değişken tanımlanır. */
DECLARE @xmlbelgeno INT
/* Sorgulanmak istenen XML Dokümanının içeriğinin aktarılacağı değişken oluşturulur. */
declare @xml xml
/* @xml değişkenin içeriği doldurulur. Dosya sisteminden OPENROWSET komutuyla çağırılabilir. */
SELECT @xml =BulkColumn FROM OPENROWSET (BULK 'C:\xml\Ornek.xml', SINGLE_CLOB) AS DATA
/* sp_xml_preparedocument prosedürü yardımıyla OPENXML için XML dosyası hazırlanır. */
EXEC sp_xml_preparedocument @xmlbelgeno OUTPUT, @xml
/* Veri Select komutuyla çağırılır. */
SELECT * FROM OPENXML(@xmlbelgeno,'Kok/Rapor', 2) WITH (Kodu VARCHAR(30), Adi VARCHAR(30),id INT, Tipi VARCHAR(30))
/*
OEPNXML komutunun;
1. parametresi hazırlanan dökümanın kodu ile çağırmak için,
2. parametresi XML dökümanının hangi dizinden sorgulanmaya başlanacağı belirlenir.
3. parametresi 1) XML Attiribute 2) XML Node 3)Tümü sorgulamak için seçim yapılır.
WITH komutu kullanılmadan çağırıldığında XML hiyerarşik yapısı ile birlikte Attiribute ve Node'ları aynı anda görebiliriz.
sp_xml_removedocument Komutu ile hazırlanmış ve sorgulanmış döküman silinir.
*/
EXEC sp_xml_removedocument @xmlbelgeno Sonuç
OPENXML komutu flags parametresi = 1
OPENXML komutu flags parametresi = 2
OPENXML komutu flags parametresi = 3
OPENXML komutu WITH komutu kullanılmadan
Farklı bir XML bağlantı örneği de aşağıda verilmiştir. DECLARE @xml xml SELECT @xml = BulkColumn FROM OPENROWSET (BULK 'C:\xml\Ornek.xml', SINGLE_CLOB) AS DATA
SELECT
tr.Attr.value('./@id', 'INT') id
, tr.Attr.value('./@Tipi', 'varchar(70)') Tipi
, tr.Attr.value('.','varchar(500)') as [.]
, tr.Attr.value('..', 'varchar(70)') [..]
, tr.Attr.query('.') query
, tr.Attr.query('*') [*]
from @xml.nodes('Kok/Rapor') tr(Attr)
Yorumlar
Yorum Gönder