Aylık arşivler: Eylül 2011

EXEC ve sp_executesql Hangisi ?

Doğrudan SQL komutu çalıştırmak yerine bazı durumlarda dinamik SQL scriptleri çalıştırmak zorunda kalabiliyoruz. Özellikle stored procedure’ler içerisinde değişkenler kullanılarak oluşturulmuş script’leri çalıştırmak için EXEC komutu veya sp_executesql prosedürü kullanılır. Peki bunlardan hangisini ne zaman tercih etmeliyiz. Normal şartlar altında bir SQL cümlesini doğrudan çalıştırdığımız SQL Server, bellekten ilgili yürütme planını okuyup ona göre sorguyu çalıştırır. Böylece daha önceki deneyimleri doğrultusunda en uygun okumayı tercih etmiş olur. Fakat dinamik cümleleri çalıştırırken execution plan kullanılmaz her çalıştırmada yeni bir execution plan oluşturulur. Bu iki komutun en önemli farkı sp_executesql, parametrik olabilirken EXEC / EXECUTE parametrik değildir. Buradaki parametreden kastımız bu komutlara parametre olarak verilmiş sorgunun parametrik olmasıdır. Asıl önemli olan konu performans açısından sunucu aynı execution plan’ı kullandığı için daha sp_executesql yordamı daha iyi sonuç vermektedir. Çünkü bu yordamın mantığı sorgunun aynı olduğu sadece parametrenin farklı çalıştırılıyor olmasıdır. Aşağıdaki örnekte küçük bir tablodan bu 2 yordam aracılığıyla okuma yapılmış olup execution plan durumları listelenmiştir. Sistemdeki mevcut execution plan’ları temizlemek için DBCC FREEPROCCACHE kullanılır.
Okumaya devam et

SQL Script Dosyalarını Toplu Çalıştırma (OSQL – SQLCMD)

İçerisinde SQL Script’lerin bulunduğu metin dosyalarını komut satırında çalıştırmak için en iyi yöntem OSQL veya SQLCMD programcıklarını kullanmaktır (SQL Server Command Line Tool). Bilindiğim gibi bu araçlar Command Prompt’tan SQL Sunucusuna erişmeyi sağlayıp sorgu çalıştırmamıza imkan tanır. OSQL aracı SQL 2000’den beri kullanılmakta. SQL Server 2005 ile birlikte SqlCmd aracı sunuldu. Aşağıdaki ekranda bu komutların parametreleri görülmektedir.
Okumaya devam et