Oca 18
Özellikle bazı raporlarda veri satırlarının yanına kendinden önceki satılardaki bir alanın toplamını yazma ihtiyacı duyabiliyoruz. Aşağıdaki gibi Satis isimli bir tablo olduğunu düşünelim.

Bu tabloda her dönemin karşısında o döneme ait ciro bulunmaktadır. Bu tablodaki verilere dayalı olarak aşağıdaki gibi bir sonuç elde etmek istiyoruz.

Read the rest of this entry »
Mar 28
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. Read the rest of this entry »
Mar 27
SQL Server’de bir kullanıcıya verdiÄŸimiz yetkileri baÅŸka bir kullanıcıya nasıl kopyalayabiliriz. T-SQL’de bunu doÄŸrudan yapabileceÄŸimiz bir komut yapısı bulunmamaktadır. Her defasında her kullanıcı için GRANT ve DENY ifadelerini kullanarak manual olarak aynı yetkilerin verilmesi gerekir. Veya Management Studio veya Enterprise Manager üzerindeki Generate Script bölümü kullanılarak veritabanına ait script kodları oluÅŸturulur. Orada ilgili kopyalama ve deÄŸiÅŸtirme iÅŸlemi yapılır. Bu yazıda nasıl bir script yazılarak bu iÅŸlemin daha kolay yapılacağını örneklendireceÄŸiz. Read the rest of this entry »
Mar 21
SQL Server üzerinde programlama yaparken metinleri ayrıştıran split fonksiyonunun T-SQL’de olmayışının eksikliÄŸini hep hissetmiÅŸizdir. Bir metni bölmenin birçok yöntemi olsa da hepsinin mantığı döngü kurup metin içerisinde virgül gibi bir ayıraçın konumu bularak her virgül arasındaki deÄŸeri listelemektir. SQLTeam’da denk geldiÄŸim aÅŸağıdaki yöntemin daha hızlı olduÄŸu ve pratik olduÄŸunu düşünüyorum.
IF OBJECT_ID('dbo.Split') IS NOT NULL
DROP FUNCTION dbo.Split
GO
CREATE FUNCTION dbo.Split(@data NVARCHAR(MAX), @delimiter NVARCHAR(5))
RETURNS @t TABLE (data NVARCHAR(max))
AS
BEGIN
DECLARE @textXML XML;
SELECT @textXML = CAST('' + REPLACE(@data, @delimiter, '') + '' AS XML);
INSERT INTO @t(data)
SELECT T.split.value('.', 'nvarchar(max)') AS data
FROM @textXML.nodes('/D') T(split)
RETURN
END
GO
dbo şemasına altında oluşturulan bu fonksiyonu kullanalım.
DECLARE @text NVARCHAR(max)
SELECT @text = 'C#, VB.NET, SQL Server, AJAX'
SELECT * FROM dbo.Split(@text, ',')
C#
VB.NET
SQL Server
AJAX
Mar 14
SQL Server belli sayı aralığında iÅŸlem yapmak için genellikle while döngüsü kullanılır. Oysa elimizin altında ardışık sayıların bulunduÄŸu bir tablo bulunursa her defasında while ile sözkonusu aralıktaki sayıları bulmaktansa basit Join iÅŸlemleriyle başı ve sonu verilmiÅŸ tarihsel, sayısal ve metinsel bir aralık oluÅŸturulabilir. Bu yazıda böyle bir tablonun nasıl oluÅŸturulacağı ve ne tür durumlarda kullanabileceÄŸimizi örneklendireceÄŸiz. Bu çalışmanın T-SQL ile ilgili iyi bir egzersiz olacağını düşünüyorum. Read the rest of this entry »
Åžub 27
Bu blogda doÄŸrudan yeni teknolojileri anlatmak yerine eski ve yeni teknolojileri gözetmeksizin günlük hayatta, projelerde ihtiyaç duyulan yöntemleri, ipuçlarını, konuları, örnekleri, yazılım geliÅŸtirme sürecinde dikkat edilmesi gereken konuları vermeye çalışıyoruz. Yazılım mühendisliÄŸiyle ve C# veya VB.NET programlama dilleriyle ilgili detaylı konuları yakın zamanda çıkacak olan kitaplarımda vermeye çalıştım. Bu küçük yazıda da özellikle veri ambarı raporlama sistemlerinde iÅŸlerimizi kolaylaÅŸtıracak Tarih tablosunun içeriÄŸini vereceÄŸiz. “Date dimension table” olarak isimlendirilen bu tablo tüm data warehouse sistemlerinde ortak olup sistemin kullanım amacına uygun olarak farklı detaylar içerir. Belli tarih aralığının detaylarını içeren bu tablo çalışma anında tarihsel hesaplamaların neden olacağı performans ve zaman kaybını engeller. Bu tablo aynı zamanda OLTP uygulamalarında lookup olarak ta kullanılabilir.
Read the rest of this entry »
Nis 24
T-SQL’de iki string’i birleÅŸtirmek için CONCAT metodu kullanılır. Bazı durumlarda aynı satırdaki verileri deÄŸil alt altta durunda verileri birleÅŸtirmek isteyebiliriz. Bunun için klasik deÄŸer birleÅŸtirilme yöntemi kullanılır. ÖrneÄŸin bir müşteriye ait ikinci bir tabloda row olarak duran birden fazla telefonunu, okuduÄŸu gazeteleri, hobilerini okuyup tek bir satırda gösterme ihtiyacı duyabiliriz. Musteri ve MusteriTelefon tabloları olduÄŸunu düşünelim.
Musteri
————–
1 Ahmet Kaymaz
2 Mehmet Kaymaz
MusteriTelefon
————–
1 (0212)111
1 (0533)111
2 (0216)111
2 (0542)111
İlk iÅŸlem olarak örneÄŸin ID’si 1 olan Ahmet Kaymaz’ı telefonlarını birleÅŸtirerek getirelim. Bunun için tipik string birleÅŸtirmesi yapacağız. Read the rest of this entry »
Åžub 23
SQL Server üzerinde farklı kaynaklardan data transferi, toplu aktarımlar ve yerel iÅŸlemler için çoÄŸu zaman Data Transformation Services (DTS) denilen Veri Transfer Servisini kullanırız. Hatta bu servis aracılığıyla hazırladığımız paketleri SQL Server Agent yönetiminde Job iÅŸlemlerine alarak belli peryotlarda çalışmasını saÄŸlarız. Özellikle kurumsal uygulamalarda dağıtık kaynaklardan belli anlarda verileri çekmek ve üzerinde iÅŸlem yaparak yerel veritabanlarına kaydetmek için DTS’ler vazgeçilmez bir alışkanlık haline gelir. MSDB veritabanında tutulan bu paketler, sunduÄŸu zengin connection provider ve tasklarla ciddi bir kolaylık saÄŸlar. Bu bölümde DTS paketleri içindeki genel deÄŸiÅŸken tanımlamanın nasıl yapılacağını ve dışardan DTS’lerin nasıl parametrik haline getirileceÄŸini göreceÄŸiz. Read the rest of this entry »
Oca 02
UNION ve UNION ALL ifadeleri iki sorgu sonucunun birleÅŸtirilmesi için kullanılır. Tek farkı, UNION mükerrer kayıtları getirmez, UNION ALL ise tüm kayıtları olduÄŸu gibi listeler. Önceki yazıda her grubun ilk kayıt edilmiÅŸ 2 ürününü UNION yöntemiyle getirmiÅŸtik. Aynı yöntemi kullananarak her grubun son kayıt edilmiÅŸ 2 ürünü alacağız. Bunun için aklımıza ilk gelen query ÅŸudur; tablodaki kayıtları UrunId’ye göre büyükten küçüğe sıralayıp TOP 1 ile en üsttekini almaktır. Read the rest of this entry »
Oca 02
Birbirleriyle ilişkili iki tablo düşünelim. Birinci tabloda başlık bilgileri ikinci tabloda ise bu başlığa ait detayların bulunduğunu varsayarak her başlıktan n tane detay kaydını getirmek için nasıl bir query yazmamız gerekir. Özellikle haber sitelerinin anasayfalarında her gruptan belli kriterlere uygun n kayıt getirmek veya yüksek stoklu ürün gruplarının en yüksek stoklu n tane ürününü listelemek için bu tür pratik querylere ihtiyaç duyarız.
Read the rest of this entry »
Recent Comments