Sql Server veritabanında en büyük 10 tablo

Sql Server‘da belli bir veritabanında en büyük tabloları bulmak için aşağıdaki sorguyu çalıştırabiliriz;

DECLARE @TabloBoyutlari TABLE (TabloAdi VARCHAR(50), SatirSayisi INT, AyrilmisAlan VARCHAR(50), KullanilanAlan VARCHAR(50), IndexBoyu VARCHAR(50), KullanilmayanAlan VARCHAR(50))

INSERT INTO @TabloBoyutlari EXECUTE sp_MSforeachtable ‘sp_spaceused [?]’

SELECT TOP 10 * FROM @TabloBoyutlari ORDER BY CONVERT(INT, REPLACE(AyrilmisAlan, ‘ KB’, ‘’)) DESC

Bu sorgu sayesinde ilgili veritabanındaki tabloların,

  • Tablo Adı
  • Satır Sayısı
  • MDF dosyasında ilgili tablo için ayrılmış alanın boyutu
  • MDF dosyasında ilgili tablo için ayrılmış alanın kullanılan boyutu
  • MDF dosyasında ilgili tablonun indexleri için ayrılmış alan
  • MDF dosyasında ilgili tablo için kullanılmayan alan bilgilerine ulaşabiliriz.

İlgili tablo için aşağıdaki eşitlik her zaman doğrudur;

Kullanılan Alanı + Index Alanı + Kullanılmayan Alanı = Ayrılmış Alan

Benim bilgisayarımdaki AdventureWorks2008R2 örnek veritabanında yukarıdaki sorguyu çalıştırdığımda, şöyle bir sonuç alıyorum;

Sql Server - Veritabanında en büyük 10 tablo

Kısa Sınav - 15

Aşağıdaki kod bloğunu çalıştırdığımızda ekran çıktımız nasıl olur?

private static string Degisken = “Ilk Deger”;

public static string Test() { return Degisken = “Ikinci Degisken”; }

public static void Main(string[] args) { Console.WriteLine(Degisken);

Console.WriteLine(Test());

Console.WriteLine(Degisken);

Console.ReadLine(); }</pre>

Sorunun doğru cevabı için;

Console çıktısı aşağıdaki gibi olacaktır;

Ilk Deger
Ikinci Degisken
Ikinci Degisken

MSDN’de (=) operatörü atamalarının nasıl yapıldığını okursanız, yukarıdaki sonuç anlamlı olacaktır.

Aşağıdaki basit örnekte oluşan durum, aslında aynı;

b = a = "engin polat";


Önce *a değişkenine* **engin polat** değeri atanacak. Sonra *b değişkenine*, **a değişkeninin değeri** atanacaktır.

**MSDN'den alıntı : ***The assignment operator (=) stores the value of its right-hand operand in the storage location, property, or indexer denoted by its left-hand operand and returns the value as its result. The operands must be of the same type (or the right-hand operand must be implicitly convertible to the type of the left-hand operand).*

C# ile Form'a gölge efekti verelim ve titreme sorununu düzeltelim

Windows Forms uygulamalarında Form‘un gölge efektine sahip olmasını istiyorsak, öncelikle Form‘un FormBorderStyle özelliğini None yapmalıyız.

this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;</pre>

Form sınıfının CreateParams özelliğini override etmemiz gerekiyor. CreateParams özelliği geriye CreateParams tipinde bir nesne döndürür.

protected override CreateParams CreateParams
{
    get
    {
        CreateParams cp = base.CreateParams;

        cp.ClassStyle |= 0x20000;

        return cp;
    }
}

CreateParams sınıfının ClassStyle özelliğine 0x20000 değerini ekliyoruz. Böylece formumuz çalışmaya başladığında etrafında gölge gözüküyor.

Gölgeli Form

Form üzerine çok fazla kontrol eklediğimizde, özellikle eğer kontroller hafızada çok yer kaplayan 3.parti kontrollerden ise; formumuzda titreme diyebileceğimiz bir efekt oluşmaya başlar.

Çoğu zaman bu durum rahatsızlık oluşturma derecesine kadar varır.

Bu sorunu çözmek için, kontrollerin DoubleBuffered özelliğini true değerine ayarlamamız gerekmektedir.

Fakat DoubleBuffered özelliği Form sınıfının değil Control sınıfının bir özelliği olduğundan dolayı, Form’un titremesini gidermek için kullanamayız.

Form sınıfının CreateParams özelliğinde bu sorunu da çözebiliriz;

protected override CreateParams CreateParams
{
    get
    {
        CreateParams cp = base.CreateParams;

        cp.ExStyle |= 0x02000000;

        return cp;
    }
}

Bu sefer CreateParams sınıfının ExStyle özelliğine 0x02000000 değerini eklememiz gerekiyor.

Örnek uygulamanın tüm kodu;

protected override CreateParams CreateParams
{
    get
    {
        CreateParams cp = base.CreateParams;

        cp.ClassStyle |= 0x20000;

        cp.ExStyle |= 0x02000000;

        return cp;
    }
}


Dizide bir elemandan kaç adet olduğunu bulalım

Elimizdeki bir dizide, belli bir elemandan kaç adet olduğunu bulmamız gerekebilir.

Bunu yapmanın programatik olarak en kolay yolu LINQ sorgusu yazmaktır.

Örneğin aşağıdaki Extension Method, LINQ sorgusu ile aranan elemandan, ilgili listede kaç adet olduğu sonucunu döndürür;

public static int CountTimes< T >(this List< T > list, T item) { return ((from t in list where t.Equals(item) select t).Count()); }</pre>

Örnek kullanım;

using System;
using System.Linq;
using System.Collections.Generic;

public static class Program
{
    static void Main(string[] args)
    {
        var list1 = new List< int >() { 1, 2, 3, 4, 5, 6, 7, 7, 8, 9 };
        var list2 = new List< string >() { "a", "b", "b", "b", "c", "d", "e", "f" };

        Console.WriteLine("Birinci listede 7, " + list1.CountTimes(7) + " adet var");
        Console.WriteLine("İkinci  listede b, " + list2.CountTimes("b") + " adet var");

        Console.ReadLine();
    }

    public static int CountTimes< T >(this List< T > list, T item)
    {
        return ((from t in list where t.Equals(item) select t).Count());
    }
}

Yukarıdaki örnek kodu çalıştırdığınızda, şöyle bir sonuç almanız lazım;

Birinci listede 7, 2 adet var
İkinci  listede b, 3 adet var


Bu kodda ne yanlış var? – 4

Bowling skorlarını hesaplayan bir uygulama yazıyoruz.

2 oyuncunun 3 oyunda aldığı skorları hesaplayan aşağıdaki kodu yazdık ve çalıştırdık.

Fakat rakamlarda bir terslik var sanki. Sizce problem nedir ve nasıl düzeltebiliriz?

using System;

class Program { static void Main(string[] args) { int[,] PuanTablosu = { {101, 128, 143}, {123, 115, 116} };

    int OyuncuPuan = 0;

    for (int iLoop = 0; iLoop < = PuanTablosu.GetUpperBound(0); iLoop++)
    {
        for (int yLoop = 0; yLoop <= PuanTablosu.GetUpperBound(1); yLoop++)
        {
            OyuncuPuan += PuanTablosu[iLoop, yLoop];
        }

        Console.WriteLine("Oyuncu {0} skor: {1}", iLoop + 1, OyuncuPuan);
    }

    Console.ReadLine();
} }</pre>

Engin Polat hakkında

Senior Software Engineer, @Microsoft

Ada ve Ege'nin babası ;)

Kategoriler

İstatistik

Makale Adedi: 484

Creative Commons Lisansı