SQL’de “Geçersiz Sütun Adı” Hatasını Anlamak
SQL Server ile çalışırken ve bir bağlı SSAS sunucusundan veri sorgularken, oldukça can sıkıcı olabilen bir hata ile karşılaşabilirsiniz: “Geçersiz sütun adı ‘Değer’”. Bu sorun genellikle SQL ifadelerinizin WHERE
ifadesinde bir takma ad kullanarak sonuçları filtrelemeye çalıştığınızda ortaya çıkar. Bu blog yazısında bu sorunu ayrıntılı bir şekilde inceleyecek ve onu çözmenize yardımcı olacak basit bir çözüm sunacağız.
Sorunun Açıklaması
İlk SQL sorgunuzda her şeyin doğru çalıştığını göreceksiniz:
SELECT "Çirkin OLAP adı" as "Değer"
FROM OpenQuery(OLAP, 'OLAP Sorgusu')
Fakat değerleri sıfırdan büyük olacak şekilde filtrelemek için WHERE
ifadesi eklediğinizde:
WHERE "Değer" > 0
şu hatayı alırsınız:
Geçersiz sütun adı ‘Değer’
Bu hata, SQL Server’daki değerlendirme sırası nedeniyle oluşmaktadır ve bu sıralama sizin sorguyu yazma şeklinizden farklıdır. Bu sıralamayı anlamak, böyle hatalardan kaçınmak için çok önemlidir.
SQL Sorgu İşleme Sırası
SQL Server sorguları belirli bir sıraya göre işler. İşte bu sıralamanın görünümü:
- FROM: kaynak tablo veya görünümleri belirler.
- ON: birleşim koşulları.
- JOIN: tabloları birleştirir.
- WHERE: kriterlere göre satırları filtreler.
- GROUP BY: satırları gruplar.
- HAVING: grupları filtreler.
- SELECT: döndürülecek sütunları seçer.
- ORDER BY: sonuç kümesini sıralar.
Bu sıraya göre, SQL motoru WHERE
ifadesini işlemden geçirmeden önce SELECT
satırını değerlendirir, bu da “Değer” takma adının koşul kontrolü sırasında henüz tanınmadığını gösterir.
Çözüm
Bu sınırlamanın üstesinden gelmek için bir satır içi görünüm (bir türevi tablo olarak da bilinir) oluşturabilirsiniz. Bu yöntem, orijinal sorguyu kapsüllemenize olanak tanır ve takma adın sonraki ifadelerde geçerli bir sütun adı olarak değerlendirilmesini sağlar. Bunu nasıl yapabileceğiniz:
SELECT A.Değer
FROM (
SELECT "Çirkin OLAP adı" as "Değer"
FROM OpenQuery(OLAP, 'OLAP Sorgusu')
) AS A
WHERE A.Değer > 0
Çözümün Ayrıntılı İncelenmesi
- Satır İçi Görünüm Oluşturma:
SELECT
ifadesi parantez içine alınırken bir takma ad verilir (bu durumdaAS A
). Bu görünüm yeni bir “tablo” olarak kabul edilir. - Takma Ada Atıfta Bulunma: Artık
Değer
satır içi görünüm bağlamında geçerli bir sütun olduğundan, bunuWHERE
ifadesinde güvenle kullanabilirsiniz.
Sonuç
SQL Server’ın sorguları temel düzeyde nasıl işlediğini anlamak, “Geçersiz sütun adı” sorunları gibi hataları ayıklarken size çok zaman kazandırabilir. Bir satır içi görünüm kullanarak, SQL’in WHERE
ifadesi işlenirken neye atıfta bulunacağını bildiği mantıksal bir yapı oluşturursunuz.
SQL sorgularıyla çalışırken benzer sorunlarla karşılaştığınızda, değerlendirme sırasını düşünmeyi ve gerekli yerlerde satır içi görünümler kullanmayı hatırlayın, böylece daha temiz ve etkili bir sorgu yapısı oluşturabilirsiniz.
Artık SQL sorgularınızı güvenle çözmek için hazırsınız!