Alper Konuralp

Kartınızı Oluşturun
Google+
Follow @alperkonuralp

Posts Tagged ‘tsql’

T-Sql String’i parçalara ayırma

Merhaba, Birçok noktada işimizi kolaylaştırabilecek bir T-Sql fonksiyonunu anlatmak istiyorum. Önce soruna bakalım :
Elimizde bulunan :

Excel 2000, Excel XP, Excel 2003, Excel 2007, Excel 2010

şeklindeki bir yazıyı bir tabloya dönüştürmek istiyoruz diyelim. Bu string’i (,) karakterinden parçalamamız (split) gerekir.

İşte çözüm:

DECLARE @ara AS NVARCHAR(MAX)

SET @ara = N'Excel 2000, Excel XP, Excel 2003, Excel 2007, Excel 2010';

SELECT *
FROM dbo.Split ( @ara , ',');

İyide Bu dbo.Split ne diyebilirsiniz. Güzel soru, cevabıda şu :

-- SQL Server 2005 ve 2008 de çalışabilecek, String'i parçalara ayırmayı sağlayan bir araçtır.
CREATE FUNCTION dbo.Split
(
    @Text NVARCHAR(MAX) , -- Parçalanacak string'i içerecek
    @Seperator NVARCHAR(20)) -- Ayraç
RETURNS @sonuc TABLE ( Item NVARCHAR(MAX) ) -- sonuç olarak bir tablo sonucu dönecek
AS
BEGIN -- işte başlıyoruz.
    IF @Text IS NOT NULL AND LEN(@Text) > 0 -- önce gelen veri var mı kontrolü
    BEGIN
        IF CHARINDEX(@Seperator, @Text) = 0 -- Eğer ayraçtan hiç string'de yok ise o zaman yazıyı tek bir parça olarak göndeririz.
        BEGIN
            INSERT INTO @sonuc
            VALUES ( @Text )
        END
        ELSE
        BEGIN
            WITH ara AS ( -- gelelim işin en zevkli tarafına recursive sorgulama ile sisteme parçalara ayıralım.
                SELECT  -- önce ilk satır
                    LTRIM(RTRIM(SUBSTRING(@Text, 1, CASE CHARINDEX(@Seperator, @Text) WHEN 0 THEN LEN(@Text) ELSE CHARINDEX(@Seperator, @Text) - 1 END))) AS a, -- ilk ayraçtan önceki kısım alınır.
                    LTRIM(RTRIM(SUBSTRING(@Text, CASE CHARINDEX(@Seperator, @Text) WHEN 0 THEN LEN(@Text) ELSE CHARINDEX(@Seperator, @Text) + LEN(@Seperator) END, LEN(@Text)))) AS b -- ilk ayraçtan sonraki kısım alınır.

                UNION ALL -- recursive kısım başlıyor.
                SELECT -- Son eklenen satırdan yeni bir satır oluşturuluyor
                    LTRIM(RTRIM(SUBSTRING(b, 1, CASE CHARINDEX(@Seperator, b) WHEN 0 THEN LEN(b) ELSE CHARINDEX(@Seperator, b) - 1 END))), -- ayraçtan önceki kısım alınır
                    LTRIM(RTRIM(SUBSTRING(b, CASE CHARINDEX(@Seperator, b) WHEN 0 THEN LEN(b) + 1 ELSE CHARINDEX(@Seperator, b) + 1 END, LEN(b)))) -- ayraçtan sonraki kısım alınır
                FROM ara -- Recursive olayını yapan kısım. Dikkat ederseniz CTE kendini çağırıyor.
                WHERE LEN(b) > 0 -- işte döngüyü dizginleyen arkadaş. Eğer b boşsa iş bitmiştir. Bu olmaz ise sonsuz döngüye girer
            )
            INSERT INTO @sonuc -- Sonuçlar iade alanına yazılıyor.
            SELECT a -- sadece ilk kolon yeterli
            FROM ara -- CTE
        END
    END

    RETURN -- işte bu kadar
END

Gördüğünüz bu fonksiyon işini çok iyi yapıyor. Bazı kontrollere belki gerek olmayabilir, veya daha fazla kontrole gerek olabilir ama bu bile bir çok görevi yerine getirebilir.

Kolay Gele

SQL Server Veri tabanlarında transaction log dosyasının en küçük boyuta indirilmesi.

Bildiğiniz gibi SQL SERVER transaction log dosyaları veri tabanları üzerindenki bütün hareketleri tutmaktadırlar. bu hareketler belli bir süre sonra veri tabanının alanını aşan bir duruma gelebilir. Böyle bir durumda transaction log dosyasındaki eski hareketleri temizleyip, dosyanın boyutunu düşürmeyi düşünebilirsiniz.

Bu durumda aşağıdaki komutları kullanabilirsiniz.

USE DatabaseAdı
GO
DBCC SHRINKFILE(<TransactionLogDosyasınınAdı>, 1)
BACKUP LOG <DatabaseAdı> WITH TRUNCATE_ONLY
DBCC SHRINKFILE(<TransactionLogDosyasınınAdı>, 1)
GO

DİKKAT : Bu yöntemi veri tabanınızda kullanırken dikkatli olmalısınız. işleme başlamadan önce veri tabanının yedeğini almanızda büyük fayda var. Ayrıca komutu kullanmanız halinde oluşabilecek problemlerden yazar sorumlu tutulamaz. Komutu kullanırken oluşacak riskleride kabul etmiş sayılırsınız.

İzmir Yazılım Grubu
Google Groups
Subscribe to İzmir Yazılım Grubu
Email:
Visit this group
Mayıs 2012
Pts Sal Çar Per Cum Cts Paz
« Şub    
 123456
78910111213
14151617181920
21222324252627
28293031  
Yeni Downloadlar
StatPress
Visits today: 99
Sahip oldugum diger adresler :
3dmaxtraining.info
3dmaxtrainings.com
3dmaxtrainings.info
adobelearning.info
adobelearnings.info
adobetrainings.com
adobetrainings.info
autocadbootcamp.info
autocadexams.info
autodesklearning.info
autodesklearnings.com
autodesklearnings.info
ciscotrainings.info
egepro.com
elonunbahcesi.com
elonunbahcesi.info
flashbootcamp.info
flashexams.com
flashexams.info
konuralp.biz
konuralp.org
mayatutorial.info
mayatutorials.info
microsoftexams.info
microsofttrainings.info
proege.com
sharepointlearning.info
sharepointlearnings.com
sharepointlearnings.info
sharepointtutorial.info
silverlightbootcamp.info
silverlightlearning.info
silverlightlearnings.info
silverlighttraining.info
silverlighttrainings.com
silverlighttrainings.info
silverlighttutorial.info
silverlighttutorials.info
sirasende.info
urunbul.info
yagmurca.com
yagmurca.info