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.
Query Results
Last updated: 2008-02-20 11:19:51.457
| MusteriId | AdSoyad |
|---|---|
| 1 | Cem Aktar |
| 2 | Sena |
| 5 | Metin Meriç |

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.
Müşteri Listesi
| Müşteri Kodu | Müşteri Adı-Soyadı |
|---|---|
| <%insert_data_here%> | <%insert_data_here%> |
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.
<%begindetail%> <%insert_data_here%> <%enddetail%>
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 = '<table cellpadding="1" cellspacing="1" border="1">'
+'<tr><th>Müşteri Kodu</th><th><b>Ad Soyad</b></th></tr>'
--Tablonun iç kısmını düzenleyelim
SET @TabloBody=''
SET @TabloBody=CAST(
(SELECT CAST(MusteriId as varchar(5)) + '</td><td>'+
RTRIM(AdSoyad) + '</td><td>'
FROM Musteri FOR XML PATH ('tr'),type)
as varchar(max))
SET @TabloBody = @TableHeader + REPLACE( REPLACE( @TabloBody, '<', '<' ), '>', '>' )+ '</table>'
--Bundan sonra @TabloBody değişkenin değeri mail olarak ilgili kişilere atılabilir




Mart 27th, 2009 at 19:28
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
Mart 31st, 2009 at 08:15
İ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.
Mart 31st, 2009 at 15:27
yanıtladığınız için teşekkür ederim