Yazar arşivleri: Ahmet Kaymaz

XML Formatını Kullanarak Metni Bölmek (String Split)

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('
dbo şemasına altında oluşturulan bu fonksiyonu kullanalım.
[sql]DECLARE @text NVARCHAR(max)
SELECT @text = 'C#, VB.NET, SQL Server, AJAX'

SELECT * FROM dbo.Split(@text, ',')

C#
VB.NET
SQL Server
AJAX

SQL Server’de Neden “Sayılar” Tablosuna İhtiyaç Duyarız

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. Okumaya devam et

SQL Server’de Ne Zaman Defrag Yapmalıyız

Fragmentation (parçalama) kavramı bilgisayar biliminde bellek, disk gibi kaynaklar üzerindeki birimlerin düzensiz parçalar (fragment) haline dönüşmesi ve bunun sonucunda düzenli boş alanın azalmasıdır. Dağılmış bu parçaları birleştirme işlemine defragmentation (birleştirme) denilir. SQL Server’da uzun süre veritabanı üzerinde yapılan silme, güncelleme, ekleme işlemleri sonucunda veritabanı dosyasında data veya index kayıtları arasında boş alanlar oluşur. Boş alanlar birbirleriyle ilişkili dolu kayıtların arasında olduğu için herhangi bir kayda erişme durumunda dağılmış kayıtlar arasında çok dolaşılacağından ciddi zaman kaybedilmektedir. Veritabanı dosyasındaki boş ve dolu alanları bir tarafa toplayıp dosyayı daha ekonomik, ergonomik kullanmak için belli dönemlerde defragmantasyon yapmak gerekir. Okumaya devam et

SQL Server Programlama ve Yönetim İpuçları – II

Daha önce yazdığımız ipuçlarına ek olarak bu yazıda aşağıdaki ipuçlarını vereceğiz.

  • SQL Server servisi her çalıştığında bazı komutları nasıl çalıştırabiliriz.
  • SQL Server Enterprise Management konsolde açılmıyor.
  • “IS NULL” ve “= NULL” arasındaki fark nedir.
  • COALESCE(), ISNULL() ve NULLIF() fonksiyonlar arasındaki fark nedir.
  • NEWSEQUENTIALID() ve NEWID() arasındaki fark nedir.
  • TRUNCATE ile DELETE arasındaki fark nedir.
  • T-SQL aracılığıyla uzaktan erişim nasıl açılır/kapatılır.
  • Veritabanı dosyalarının büyüklüğünü her gün mail ile nasıl alabilirim.
  • İki saat arasındaki farkı saat olarak yazdırmak

Okumaya devam et

Yeni Nesil Veri Programlama Modeli (ADO.NET 3.5)

Microsoft firması .NET Framework 3.0 ile birlikte ADO.NET’in yeni bir versiyonunu yayınlamadı. .NET Framework 3.5 ile birlikte yeni eklentiler kazandırılmış ADO.NET 3.5 sürümü yayınlandı.
Microsoft, ADO.NET 3.5 sürümleriyle birlikte veritabanı uygulama mimarisinde büyük kolaylık sağlayan Object Relational Mapping (O/R Mapping) yöntemini destekleyecek önemli adımlar attı. Bu amaçla ADO.NET Entity Framework aracı geliştirildi. Konunun ayrıntılarına geçmeden önce bu kavramları tanımlayalım ve neden yeni bir yaklaşıma ihtiyaç duyulduğunu açıklayalım. Okumaya devam et

SQL’de Özet Tarih Tablosu / Date dimension table

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.
Okumaya devam et

SQL Server’da FTP ve e-Mail İşlemi

SQL Server üzerinde otomatik sorgular hazırlayıp sorgu sonuçlarını raporla ilgili kişilere mail olarak atmak veya ftp aracılığıyla belirlenmiş bir alana aktarmak özellikle kurumsal uygulamalarda ihtiyaç duyulan bir durumdur. Bu yazıda SQL Server üzerinde mail ve ftp işlemi nasıl yapılacağını örneklendireceğiz. Okumaya devam et

“8. Öfkeli Adam” Olabilmek

12 Angry Men / 12 Öfkeli Adam

12 Angry Men, Sidney Lumet tarafından yönetilmiş ve görünürde Henry Fonda’nın başrolde oynadığı 1957 yapımı bir kült filmdir. “18 yaşındaki bir Latin genç, babasının ölümünden sorumlu tutularak mahkemeye çıkartılır. Duruşmayı takip eden 12 jüri üyesi tanıkların da ifadelerine başvurduktan sonra, gencin suçlu olduğuna kanaat getirirler. Karar açıklanacağı zaman 11 üye, onun suçlu olduğunu ve idam edilmesini savunurken Bay Davis, karara karşı çıkar ve herkesi kararlarını yeniden değerlendirmeye davet eder. Çünkü jüri, bu kararı kesin delillere göre değil, kişisel düşüncelerine ve bazı dış etkenlere göre vermiştir.” Okumaya devam et

SQL Server 2005 Database Snapshot

SQL Server 2005 ile gelen yeniliklerden biri olan “database snapshot”, veritabanının herhangi bir andaki salt-okunur kopyasının alınmasıdır. Bu işlemin normal kopyalamadan farkı sadece değişiklik yapılmış kayıtları fiziksel olarak almasıdır. İstemcilerden snapshot’a bir istek geldiği zaman sorgulanan kayıt değişmişse sorgunun sonucu snapshot’tan gelir değişmemişse orijinal veritabanından gelir. Snapshot’un normal kopyalama gibi veritabanını olduğu gibi fiziksel kopyalamamsı kopyalama sürecinin daha hızlı olmasını ve daha az kaynak harcamasını sağlamaktadır. Snapshot’un temel amacı değişmiş kayıtların orijinal hallerini saklayıp gerektiğinde düzeltmektir. İstemci sorgularının doğrudan snapshot üzerinden yapılması değişmemiş kayıtlar için ana veritabanına gidip gelindiği için performans sorunu yaşatacaktır. Okumaya devam et

SQL Server 2005 Database Mirroring

SQL Server 2005, sistemin sürekliliği için sunduğu yöntemlerden biri de Database Mirroring yöntemidir. Service Pack 1 ile birlikte sunulmuş olan bu yöntem iki sunucu arasında log transaction kayıtlarını taşıyarak bu sunucuların senkronize olmasını sağlar. Database Mirroring, standard, enterprise veya developer sürümleri tarafından desteklenir. Bu yazıda bu modelin nasıl kurulacağını örneklendireceğiz. Okumaya devam et