Ana Sayfa > Programlama, SQL > Bu kodda ne yanlış var? – 1

Bu kodda ne yanlış var? – 1

Database’de şu scripti çalıştıralım;

CREATE TABLE T_PERSONEL
(
  ADSOYAD VARCHAR(50),
  DOGUM_TARIHI SMALLDATETIME
)

INSERT INTO T_PERSONEL VALUES ('Engin POLAT',  '1981-01-12')
INSERT INTO T_PERSONEL VALUES ('Emre ERKAN', '1979-03-14')
INSERT INTO T_PERSONEL VALUES ('Ozan ÇAĞLARGİL',  '1982-09-27')
INSERT INTO T_PERSONEL VALUES ('Fatih DURGUT',  '1978-06-23')
INSERT INTO T_PERSONEL VALUES ('Burhan İNEGÖL',  '1980-11-08')

Aşağıdaki stored procedure’i yazalım.

CREATE PROCEDURE PR_PERSONEL_LISTE
(
  @SIRALAMA INT
)
AS
BEGIN
  SELECT ADSOYAD, DOGUM_TARIHI FROM T_PERSONEL
  ORDER BY
    CASE @SIRALAMA
      WHEN 1 THEN DOGUM_TARIHI
      WHEN 2 THEN ADSOYAD
    END
END

Bu procedure’ü 1 parametresi vererek çalıştırıyoruz, ve beklediğimiz sonucu alamıyoruz.

Nerede hata yaptık? (İpucu; parametre olarak 2 vermeyi deneyin)

Yorumlarınızı bekliyorum…


İlgili diğer başlıklar:

  1. @@IDENTITY, SCOPE_IDENTITY() ve IDENT_CURRENT() arasındaki farklar
  2. Sql Server 2008′de Çoklu Insert İşlemi
  3. Bu kodda ne yanlış var? – 2
  4. Sql Server’da Hash işlemi
  5. Sql Server 2008 MERGE Operatörü

Categories: Programlama, SQL Tags: , , , , , ,
  1. Sevil Çiçek
    12:28 içinde 05 Ocak 2010 | #1

    Tabloda DOGUM_TARIHI VARCHAR(50) yaparsak sorun çözülüyor hocam.

  2. 13:33 içinde 05 Ocak 2010 | #2

    Sevil Hanım, bence DOGUM_TARIHI alanının data tipini VARCHAR yapmak çok doğru değil. Hem sıralamadaki problemi gidermez.

    Ama doğru iz üzerindesiniz, biraz daha uğraşın bakalım.

    Başka fikri olan var mı arkadaşlar?

  3. Sevil Çiçek
    16:02 içinde 05 Ocak 2010 | #3

    Bu kadar kolay olamayacağı kesindi zaten:)) Dogum tarihini evet dogru varchar yapmak mantıklı değil (yaş hesaplamak istediğimizde işimiz zorlaşacak) ama çalıştı öyle yapınca:)) Smalldatetime data tipini stringe çaviremiyor diyor hata mesajında. Ben de çevirdim:)) Merak ettim şimdi Fatih Ersin nerdesiniz:))

  4. Saygın
    17:03 içinde 07 Ocak 2010 | #4

    kodu uzun yazmıssın, biraz kısalttım.

    ORDER BY CASE @SIRALAMA WHEN 1 then 1
    WHEN 2 THEN 2 end

  5. 17:10 içinde 07 Ocak 2010 | #5

    Peki sorunun çözümü?

    Problemi tanımladık, hatta iyileştirdik bile. :)

    Sıra geldi çözüm’e. Çözüm önerisi olanlar?

  6. Murat Aras
    11:41 içinde 16 Şubat 2010 | #6

    CASE @SIRALAMA
    WHEN 1 THEN CONVERT(nvarchar(20), DOGUM_TARIHI,120)
    WHEN 2 THEN ADSOYAD
    END

  7. yavuz
    13:05 içinde 11 Mart 2010 | #7

    case içinde tip dönüşümü yapıyor smalldate varchar dan baskın çıktığı için alan smalldate olarak tanımlanıyor ve varchar alanı ise smalldate dönüşüm olmadığından hata veriyor.

    case @SIRALAMA
    WHEN 1 THEN 1
    WHEN 2 THEN 2

    çalışıyor görünsede aslında doğru sunucu vermediğini göreceksiniz.

  1. Henüz geri dönüş yok.