MS SQL Server veritabanı ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
lazymule
Üye
Mesajlar: 127 Kayıt: 16 Eki 2006 04:03
İletişim:
Mesaj
gönderen lazymule » 24 Ara 2014 01:02
Merhaba
Aşğıdaki gibi XML bir tablom var ben sql kullanarak bu veriyi nasıl okuyabilirim ?
XML SQL Server Reporting Services çıktısı (xml dosya olarak)
Teşekkürler.
Kod: Tümünü seç
<?xml version="1.0" encoding="utf-8"?>
<Report >
<table1>
<Detail_Collection>
<Detail ilceadi="ALTIEYLÜL" koy_mahadi="AKARSU" isletmeno="123465" sahibi="Cin Ali" isletmeturu_adi="SAHIS" kooperatif_adi="" uyeliktarihi="30.11.2020" tckimlik="328930722222" dogumtarihi="1964-09-20T00:00:00" baba_adi="Cali" banka_sube_kodu="0045" banka_hesap_no="4544545-6001" telefon="0 2654656" cep="0 44545454 "/>
<Detail ilceadi="ALTIEYLÜL" koy_mahadi="AKARSU" isletmeno="123465" sahibi="Cin Ali" isletmeturu_adi="SAHIS" kooperatif_adi="" uyeliktarihi="30.11.2020" tckimlik="328930722222" dogumtarihi="1964-09-20T00:00:00" baba_adi="Cali" banka_sube_kodu="0045" banka_hesap_no="4544545-6001" telefon="0 2654656" cep="0 44545454 "/>
</Detail_Collection>
</table1>
</Report>
sabanakman
Kıdemli Üye
Mesajlar: 3081 Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)
Mesaj
gönderen sabanakman » 24 Ara 2014 10:41
Eğer geçersiz karakterler barındırmayan doğru yapıda bir xml dosyanız varsa aşağıdaki sorgu işinize yarayacaktır.
Kod: Tümünü seç
DECLARE @XML AS XML, @hDoc AS INT, @SQL NVARCHAR (MAX)
SELECT @XML = CONVERT(XML, BulkColumn) FROM OPENROWSET(BULK 'C:\Yol\test.xml', SINGLE_BLOB) AS x;
EXEC sp_xml_preparedocument @hDoc OUTPUT, @XML
SELECT * FROM OPENXML(@hDoc, 'Report/table1/Detail_Collection/Detail')
WITH
(ilceadi varchar(100) '@ilceadi',
koy_mahadi varchar(100) '@koy_mahadi',
isletmeno varchar(100) '@isletmeno',
sahibi varchar(100) '@sahibi',
isletmeturu_adi varchar(100) '@isletmeturu_adi',
kooperatif_adi varchar(100) '@kooperatif_adi',
uyeliktarihi varchar(100) '@uyeliktarihi',
tckimlik varchar(100) '@tckimlik',
dogumtarihi varchar(100) '@dogumtarihi',
baba_adi varchar(100) '@baba_adi',
banka_sube_kodu varchar(100) '@banka_sube_kodu',
banka_hesap_no varchar(100) '@banka_hesap_no',
telefon varchar(100) '@telefon',
cep varchar(100) '@cep'
)
EXEC sp_xml_removedocument @hDoc
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
lazymule
Üye
Mesajlar: 127 Kayıt: 16 Eki 2006 04:03
İletişim:
Mesaj
gönderen lazymule » 24 Ara 2014 06:00
@sabanakman hocam çok teşekkürler tam istediğim bende farklı bir çözüm bulmuştum dosyadan okuma kısmına gelmeden sen yazmışsın.
Kod: Tümünü seç
DECLARE @foo XML;
SET @foo = N'<?xml version="1.0"?>
<Report >
<table1>
<Detail_Collection>
<Detail ilceadi="ALTIEYLÜL" koy_mahadi="AKARSU" isletmeno="123465" sahibi="Cin Ali" isletmeturu_adi="SAHIS" kooperatif_adi="" uyeliktarihi="30.11.2020" tckimlik="328930722222" dogumtarihi="1964-09-20T00:00:00" baba_adi="Cali" banka_sube_kodu="0045" banka_hesap_no="4544545-6001" telefon="0 2654656" cep="0 44545454 "/>
<Detail ilceadi="ALTIEYLÜL" koy_mahadi="AKARSU" isletmeno="123465" sahibi="Cin Ali" isletmeturu_adi="SAHIS" kooperatif_adi="" uyeliktarihi="30.11.2020" tckimlik="328930722222" dogumtarihi="1964-09-20T00:00:00" baba_adi="Cali" banka_sube_kodu="0045" banka_hesap_no="4544545-6001" telefon="0 2654656" cep="0 44545454 "/>
</Detail_Collection>
</table1>
</Report>';
SELECT
x.item.value('@ilceadi', 'nvarchar(100)') AS ilceadi,
x.item.value('@koy_mahadi', 'nvarchar(100)') AS koy_mahadi,
x.item.value('@isletmeno', 'nvarchar(100)') AS isletmeno,
x.item.value('@sahibi', 'nvarchar(100)') AS sahibi
FROM @foo.nodes('/Report/table1/Detail_Collection/Detail') x (item)
varyemez
Üye
Mesajlar: 262 Kayıt: 01 Oca 2009 11:00
Konum: Bursa
İletişim:
Mesaj
gönderen varyemez » 13 Şub 2015 08:36
Peki @sabanakman hocam
SELECT @XML = CONVERT(XML, BulkColumn) FROM OPENROWSET(BULK 'C:\Yol\test.xml', SINGLE_BLOB) AS x;
buradaki dosya adını
declare @dosyaadı nvarchar(100) şeklinde tanımlayıp input olarak sp de içeri almak
SELECT @XML = CONVERT(XML, BulkColumn) FROM OPENROWSET(BULK @dosyaadi , SINGLE_BLOB) AS x; kullanmak istedim çalışmıyor. Nasıl bir yol önerirsiniz.
sabanakman
Kıdemli Üye
Mesajlar: 3081 Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)
Mesaj
gönderen sabanakman » 14 Şub 2015 01:50
Kod: Tümünü seç
declare @xml_dosyaadi NVARCHAR(MAX)
set @xml_dosyaadi = 'C:\Yol\test.xml'
DECLARE @SQL_Komutu NVARCHAR(MAX)
DECLARE @Parametre NVARCHAR(500)
DECLARE @xml XML
SET @Parametre = N'@XML_OUT XML OUTPUT'
SET @SQL_Komutu = N'SELECT @XML_OUT = BulkColumn FROM OPENROWSET(BULK ' + quotename(@xml_dosyaadi, '''') + ', SINGLE_BLOB) ROW_SET';
EXEC sp_executesql @SQL_Komutu, @Parametre, @XML_OUT = @xml OUTPUT;
Declare @hDoc AS INT
EXEC sp_xml_preparedocument @hDoc OUTPUT, @XML
SELECT * FROM OPENXML(@hDoc, 'Report/table1/Detail_Collection/Detail')
WITH
(ilceadi varchar(100) '@ilceadi',
koy_mahadi varchar(100) '@koy_mahadi',
isletmeno varchar(100) '@isletmeno',
sahibi varchar(100) '@sahibi',
isletmeturu_adi varchar(100) '@isletmeturu_adi',
kooperatif_adi varchar(100) '@kooperatif_adi',
uyeliktarihi varchar(100) '@uyeliktarihi',
tckimlik varchar(100) '@tckimlik',
dogumtarihi varchar(100) '@dogumtarihi',
baba_adi varchar(100) '@baba_adi',
banka_sube_kodu varchar(100) '@banka_sube_kodu',
banka_hesap_no varchar(100) '@banka_hesap_no',
telefon varchar(100) '@telefon',
cep varchar(100) '@cep')
EXEC sp_xml_removedocument @hDoc
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
varyemez
Üye
Mesajlar: 262 Kayıt: 01 Oca 2009 11:00
Konum: Bursa
İletişim:
Mesaj
gönderen varyemez » 16 Şub 2015 01:38
Çok teşekkür ederim. mükemmel işimi gördü..