TSQL de string ayrıştırma işlemleri ve sahte dizi kullanımı-3

05 Ocak 2009 – 16:21

             Sayı tablosu kullanarak geliştirilen çözümler:

 Merhaba,TSQL de string ayrıştırma işlemleri ve sahte dizi kullanımı ile ilgili makalemizin bu bölümünde ayrıştırma işlemleri için gerekli olan sayı tablomuzu nasıl oluşturacağımızı anlatacağım. Daha büyük stringlerle çoğu durumda, ardışık olarak artan bir sayı tablosu kullanmak genellikle başvurulan daha hızlı çözümlerden biridir. Ne var ki test yapmadan, genel performans iddiaları şüphe götürmeli. Neredeyse bir metodun diğerinden iyi olduğuna karar vermek imkânsız. Sayı tablosu kullanarak çeşitli çözümlerini incelemeden önce, sayı tablosu oluşturmanın yöntemlerini inceleyeceğiz.

 TSQL ile ardışık artan bir sayı tablosu oluşturma:

            Düzenli olarak artan bir sayı tablosu oluşturmanın çeşitli yolları vardır. Bir sayı tablosu oluşturabilen ya temel bir tablo ya bir view ya da herhangi bir özel ifade bu senaryoların içinde kullanılabilir.Sayı tablosu oluşturmaya yarayan genel methodlardan bazıları gelecek bölümde detaylı bir şekilde anlatılacak. Ardışık artan değerler bir query in parçası olarak üretilebilir olmasına rağmen, genel olarak temel kalıcı bir tablo oluşturulması ve çeşitli çözümler için ihtiyaç duyulan sayıların eklenmesi önerilir. Muhtemel mükerrer kayıtları önlemek için sayı eklenen columun da Primary Key olarak kullanılmalı.

Kimlik tabanlı sayı numarası ile ardışık tablolar oluşturmak için tablonun içindeki bir tanım columunu için default değerler vererek kullanma basitçe bir yöntem olabilir. Bu yaklaşımda bir başka önemli kısım ise sadece kalıcı tablolar ile kullanılıyor olabilmesi. Herhangi bir belirtme olmadan IDENTITY özelliği her başlangıç ve artış için default olarak 1 değerini kullanır.

    CREATE TABLE dbo.Sayi(n INT NOT NULL IDENTITY) ;
    GO
    SET NOCOUNT ON ;
    INSERT dbo.Sayi DEFAULT VALUES ;
    WHILE SCOPE_IDENTITY() < 500
        INSERT dbo.Sayi DEFAULT VALUES ;

IDENTITY() fonksiyonu ile SELECT INTO herhangi bir var olan tablodan yeni bir tabloya data aktarmak için kullanabiliriz.  Örnek bir CROSS JOIN inin var olan iki tablo arasında kullanımını gösteriyor.

SELECT TOP 500 IDENTITY(INT) AS n

      INTO dbo.Sayi

      FROM Northwind.dbo.Orders o1

     CROSS JOIN Northwind.dbo.Orders o2; 

While kullanarak düzenli döngüler:

Burada basit döngü bir anda tek satır ekleyen bir döngü

CREATE TABLE dbo.Sayi(n INT NOT NULL PRIMARY KEY) ;
    GO
    SET NOCOUNT ON
    DECLARE @Index INT ;
    SET @Index = 1 ;
    WHILE @Index <= 500 BEGIN
        INSERT dbo.Sayi (n) VALUES (@Index) ;
        SET @Index = @Index + 1 ;
    END

 Yukarıdaki döngünün verimliliği aşağıdaki gibi kullanımlarla arttırılabilir

    SET NOCOUNT ON
    DECLARE @Index AS INT;
    SET @Index = 1

    INSERT dbo.Sayi SELECT 1;
    WHILE @Index * 2 < 500 BEGIN
        INSERT dbo.Sayi
        SELECT @Index + n
          FROM dbo.Sayi
        SET @Index = @Index + @@ROWCOUNT
    END

**************************************************************************
    INSERT dbo.Sayi

    SELECT @Index + n
      FROM dbo.Sayi
     WHERE @Index + n <= 500

 

 

Bookmark and Share

Post a Comment

Subscribe without commenting