SQL’de HTML Formatında Sorgu

BCP programı, Import / Export Wizard, SQL Server 2000’deki Data Transformation Services (DTS) ve SQL Server 2005’teki SQL Server Integration Services araçlarını kullanarak SQL Server içerisinde html formatında data çekilebilir. Aslında SQL Server’de bu tür formatta verilerin çekilmesinin Reporting Services aracılığıyla yapılması daha mantıklıdır. Fakat bu yazıda Reporting Services’i kurmadan bir sorgunun sonucunu html biçiminde nasıl dışarı veririz onu örneklendireceğiz.
HTML export işlemi için master.dbo.sp_makewebtask yordamı kullanılır. Çok sayıda parametreye sahip olan bu yordamın en çok kullanılan parametreleri sorgu ve sorgu sonucunun yazıldığı html sayfasının adresidir.

sp_makewebtask [@outputfile =] 'outputfile',
	[@query =] 'query'
    [, [@fixedfont =] fixedfont]
    [, [@bold =] bold]
    [, [@italic =] italic]
    [, [@colheaders =] colheaders]
    [, [@lastupdated =] lastupdated]
    [, [@HTMLheader =] HTMLheader]
    [, [@username =] username]
    [, [@dbname =] dbname]
    [, [@templatefile =] 'templatefile']
    [, [@webpagetitle =] 'webpagetitle']
    [, [@resultstitle =] 'resultstitle']
    [
        [, [@URL =] 'URL', [@reftext =] 'reftext']
        | [, [@table_urls =] table_urls,
		[@url_query =] 'url_query']
    ]
    [, [@whentype =] whentype]
    [, [@targetdate =] targetdate]
    [, [@targettime =] targettime]
    [, [@dayflags =] dayflags]
    [, [@numunits =] numunits]
    [, [@unittype =] unittype]
    [, [@procname =] procname ]
    [, [@maketask =] maketask]
    [, [@rowcnt =] rowcnt]
    [, [@tabborder =] tabborder]
    [, [@singlerow =] singlerow]
    [, [@blobfmt =] blobfmt]
    [, [@nrowsperpage =] n]
    [, [@datachg =] table_column_list]
    [, [@charset =] characterset]
    [, [@codepage =] codepage]

sp_makewebtask yordamının sunduğu kolaylıklardan biri de html tabanlı bir sayfayı şablon olarak kullanıyor olmasıdır. En basit haliyle bir sorgunun çıktısını aşağıdaki gibi html formatınta export edebiliriz.

EXECUTE sp_makewebtask @outputfile = 'C:\Sonuc.html',
@query = 'SELECT * FROM Musteri', @dbname = 'Deneme'

Sorgunun sonucunda oluşan C:\Sonuc.html sayfasınının içeriği şu şekilde olacaktır.


sp_makewebtask yordamının desteklediği code-page’leri listelemek sp_enumcodepages yordamı kullanılır.
Html şablon dosyasını oluştururken SQL Server’den gelen verilerin hangi aralıkla hangi hücrelere arasına yazılacağı ASP.NET’teki yazım biçimine benzer olarak < %begindetail%> ve < %enddetail%> etiketiyle belirnir. Bu iki etiket yazma işleminin yapılacağı alanın başlangıç ve bitişini belirtir. Bu alana herhangi bir yere datayı yazdırmak için < %insert_data_here%> ifadesi kullanılır. Aşağıdaki gibi bir şablon oluşturalım.

Bu dosyayı MusteriSablon.tpl olarak kayıt edip dosyanın konumunu sp_makewebtask yordamına @templatefile parametresiyle gönderelim.

EXECUTE sp_makewebtask @outputfile = 'c:\MusteriListe.html',
	@query = 'SELECT MusteriId,AdSoyad FROM Musteri',
	@templatefile = 'c:\MusteriSablon.tpl',
	@dbname = 'Deneme',@codepage=1254


Şablon dosyasını ve sorgumuzu XML formatında değiştirdiğimiz XML çıktı da elde etmiş oluruz. Html etiketlerinin bulunduğu şablon dosyasını şu şekilde düzenleyelim.

Bilindiği gibi T-SQL içerisinde sorgunun sonucunu xml formatında üretmek için “FOR XML” eki kullanılır. Sorgumuzu da aşağıdaki gibi değiştirelim.

EXECUTE sp_makewebtask @outputfile = 'c:\MusteriListe.html',
	@query = 'SELECT MusteriId,AdSoyad FROM Musteri for xml auto',
	@templatefile = 'c:\MusteriSablon.tpl',
	@dbname = 'Deneme',@codepage=1254

Bu durumda aşağıdaki gibi bir çıktı elde etmiş oluruz.

sp_makewebtask yordamının yaptığı için görsel olarak hazırlamanın en kolay yolu SQL Server 2000’de The Web Assistant Wizard aracını kullanmaktır.

Bu aracın güzel yanı gerekirse bu işlemi otomatiğe bağlamamızı sağlamasıdır. Oluşturacağı Job aracılığıyla gerek belli peryotlarda gerekse tablo üstünde değişiklik yapıldığı zaman html dosyasının oluşmasını sağlar.
SQL Server 2005’te The Web Assistant Wizard aracı bulunmamaktadır. Şimdilik sp_makewebtask yordamı 2005’te çalışıyor olsa da sonraki sürümlerde kaldırılacağı yazılmaktadır. sp_makewebtask yordamının kullanımı SQL Server 2005’te güvenlik nedeniyle default olarak kapalı durumdadır. “Microsoft.SQL Server 2005 » Configration Tools » SQL Server Surface Area Configuration” aracından “Enable Web Asistanst” özelliği aktif hale getirilebilir. 2005 ile birlikte bu yordam yerine Reporting Services aracının kullanılması tavsiye edilmektedir.
Bu yazıda Reporting Services aracının da nasıl kullanılacağını bir sonraki yazıda örneklendireceğiz.
Bununla birlikte SQL Server 2005’te T-SQL’de sorgunun XML formatında dönmesini sağlayan “FOR XML” deyimini PATH parametresiyle birlikte kullanarak bir html tablo oluşturabiliriz.
DECLARE @TableHeader varchar(200)
DECLARE @TabloBody varchar(max)

— HTML tablosunun üst kısmını düzenleyelim
SET @TableHeader = ‘

SQL’de HTML Formatında Sorgu” üzerine 5 düşünce

  1. ihsan keseci

    hocam merhaba bu stored procedur ve yöntem artık yok, sql server da tamamen kaldırılmış. buradaki aynı örneği acaba sql server 2008 içinde örnekleyebilir misiniz?şimdidden teşekkür eder başarılarınızın devamını dilerim

    Cevapla
  2. Ahmet Kaymaz Yazar

    İhsan merhaba,SQL Server 2005’te bu procedure yerine Reporting Services aracının kullanılması tavsiye edildi ve 2008’de tamamen kaldırıldı. SQL Server 2008 içerisinde bu yordamın bir alternatifi bulunmamaktadır. Ya xp_cmdshell veya BCP gibi komutları kullanarak kendin bir stored procedure hazırlayacaksın veya Reporting Services aracını kullanacaksın.

    Cevapla
  3. Hasan

    Merhab Ahmet Hocam.
    anlattıklarınızdan yola çıkarak şöyle bir işlem yapmak istedim. bir sayı aldım örneğin 1234567 bu sayı 12 den küçük ise
    başına *. koydum ve sayıyı ters çevirip her bir rakam arasına nokta koymak istedim.
    yani çıktı olarak *.7.6.5.4.3.2.1.e123.mezu
    şekline getirmeye çalıştım ama yapamadım.
    Sizce bu işlem nasıl yapılır ?

    Cevapla
  4. Ahmet Kaymaz Yazar

    Hasan,bu işlemi SQL Server’de doğrudan yapabilecek bir fonksiyon bulunmamaktadır. Döngüsel mantıkla her karakteri okuyup ardında nokta ekleyerek birleştirme yapabilirsin. Fakat bu tür işlemleri SQL’de yapmak pek mantıklı değil. DECLARE @Deger1 int
    SET @Deger1=123456
    IF @Deger1>12
    BEGIN
    DECLARE @Deger2 VARCHAR(10),@Deger3 VARCHAR(10)
    SET @Deger2=CAST(@Deger1 as varchar)
    SET @Deger3=”
    -Değeri rers çevir
    SET @Deger2=REVERSE(@Deger2)

    Cevapla

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Time limit is exhausted. Please reload CAPTCHA.