Gördüğünüz gibi, "neden" sorusu, tarihsel mantık ve dilin altında yatan varsayımlar da dahil olmak üzere farklı bir cevap gerektirir, bu adaleti gerçekten yapabileceğimden emin değilim.
SQL MVP Erland Sommarskog'un bu kapsamlı makalesi, mekaniğin yanı sıra bir gerekçe sağlamaya çalışıyor:
Dinamik SQL'in Laneti ve Bereketleri :
Önbellek Sorgu Planları
SQL Server'da çalıştırdığınız her sorgu bir sorgu planı gerektirir. Bir sorguyu ilk kez çalıştırdığınızda, SQL Server bunun için bir sorgu planı oluşturur - veya terminoloji giderken - sorguyu derler. SQL Server planı önbelleğe kaydeder ve sorguyu bir sonraki çalıştırışınızda plan yeniden kullanılır.
Bu (ve güvenlik, aşağıya bakınız) muhtemelen en büyük nedendir.
SQL, sorguların tek seferlik işlemler olmadığı, ancak tekrar tekrar kullanılacağı öncülünde çalışır. Tablo (veya veritabanı!) Sorguda gerçekten belirtilmezse, ileride kullanmak üzere bir yürütme planı oluşturmanın ve kaydetmenin bir yolu yoktur.
Evet, çalıştırdığımız her sorgu yeniden kullanılmayacak, ancak bu SQL'in varsayılan çalışma önceliğidir , bu nedenle "istisnalar" istisnadır.
Erland'ın birkaç başka nedeni listeledi ( saklı yordamları kullanmanın avantajlarını açıkça listelediğini unutmayın , ancak bunların çoğu ayrıca parametrelenmiş (dinamik olmayan) sorguların avantajlarıdır):
- İzin Sistemi : SQL motoru, çalışacağınız tabloyu (veya veritabanını) bilmiyorsa bir sorguyu çalıştırma haklarına sahip olup olmadığınızı tahmin edemez. Dinamik SQL kullanarak "izin zincirleri" popo bir acıdır.
- Ağ Trafiğini Azaltma : Depolanan proc ve birkaç parametre değerinin ağ üzerinden iletilmesi, uzun bir sorgu ifadesinden daha kısadır.
- Kapsülleme Mantığı : Diğer programlama ortamlarından kapsülleme mantığının avantajlarına aşina olmalısınız.
- Ne Kullanıldığını Takip Etme : Bir sütun tanımını değiştirmem gerekirse, onu çağıran tüm kodu nasıl bulabilirim? Bir SQL veritabanı içindeki bağımlılıkları bulmak için sistem prosedürleri vardır, ancak yalnızca kod saklı yordamlardaysa.
- SQL Kodu Yazma Kolaylığı : Saklı bir yordamı oluşturduğunuzda veya değiştirdiğinizde sözdizimi denetimi gerçekleşir, bu nedenle umarım daha az hata oluşur.
- Hataları ve Sorunları Ele Alma : Bir DBA, ayrı ayrı saklanan yordamların performansını sürekli değişen dinamik SQL'den çok daha kolay izleyebilir ve ölçebilir.
Yine, bunların her birinin buraya girmeyeceğim yüz nüansları var.