Hazırlanmış yürütme
ODBC API hazırlanmış yürütme ayrıştırma azaltmak için bir yol tanımlar ve yükü derleme tekrar tekrar çalıştırmak ile ilişkili bir Transact-SQL deyim. Uygulama, bir SQL deyim içeren bir karakter dizisi oluşturur ve sonra da iki aşamada yürütür.Onu çağıran SQLPrepare ayrıştırılır ve bir yürütme planına derlenmiş deyim için kez tarafındanDatabase Engine. Daha sonra çağırır SQLExecute için hazırlanmış yürütme planı her yürütülmesi gerekir.Bu, ayrıştırma ve her yürütme üzerindeki yükü derleme kaydeder.Hazırlanmış yürütme, genellikle sürekli olarak aynı, parametrelendirilmiş SQL deyim yürütmek için uygulamalarca kullanılır.
Çoğu veritabanı için hazırlanmış yürütme doğrudan yürütme ifadeleri birden fazla üç yürütülen veya deyim doğrudan yürütülen ifadeleri sırasında yalnızca saat öncelikle derlenmiş çünkü bunlar yürütülür her dört kez derlenen hızlıdır.Hazırlanmış yürütme, veri kaynağına deyim yürütüldüğünde, her sürücü yürütme planı tanımlayıcı ve parametre değerleri yerine tüm bir SQL deyim gönderebilir, çünkü bir düşüş ağ trafiğini de sağlayabilir.
SQL Server 2000 ve daha sonra algılama ve yürütme planları'dan yeniden kullanmak için geliştirilmiş algoritmaları arasında doğrudan ve hazırlıklı yürütme arasýndaki performansını azaltır. SQLExecDirect.Bu bazı performans üstünlüklerinden hazırlanmış yürütme ifadeleri doğrudan yürütülmesi için kullanılabilir kılar.Daha fazla bilgi için bkz: Doğrudan yürütme.
SQL Server 2000 daha sonra ve ayrıca için hazırlanmış yürütme desteği de sağlar.Yürütme planı yerleşik SQLPrepare ve ne zaman daha sonra yürütülen SQLExecute olarak adlandırılır.SQL Server 2000 ve daha sonra geçici saklı yordamlar oluşturmanıza gerekli olmadığı için SQLPrepareolduğundan hiçbir ek yükü sistem tabloları üzerinde tempdb.
Performansı düşürmemek için deyim hazırlık kadar ertelenmiş SQLExecute adında veya metaproperty bir işlem (örneğin, SQLDescribeCol or SQLDescribeParam ODBC) gerçekleştirilir.Bu varsayılan davranıştır.Hazır deyiminde hataları deyim yürütüldüğünde veya bir metaproperty işlem gerçekleştirilmeden kadar bilinen değil.Ayarlama SQL Server Yerel istemci ODBC sürücüsü özel deyim özniteliği SQL_SOPT_SS_DEFER_PREPARE SQL_DP_OFF için bu varsayılan davranışı devre dışı bırakabilirsiniz.
Durumunda ertelenmiş hazırlık, ya da arama SQLDescribeCol or SQLDescribeParam çağırmadan önceSQLExecute sunucusuna ek bir gidiş dönüş oluşturur.Üzerinde SQLDescribeCol, sürücü, WHERE yan tümce sorgudan kaldırır ve sunucuya FMTONLY küme ile ON açıklama sonuç kümesindeki ilk sütun sorgu sonucunda dönen get gönderir.Üzerinde SQLDescribeParam, sürücü, deyimlerde ya da sütunların sorgudaki tüm parametre imleyicileri tarafından başvuruda bulunulan bir açıklama almak için sunucu arar.Bu yöntem, alt sorgular parametrelerinde çözümlemeye alınamamasına gibi bazı sınırlamaları da vardır.
Aşırı kullanımı SQLPrepare with the SQL Server Yerel istemci ODBC sürücüsü, özellikle SQL Server'ın önceki sürümlerine bağlıyken, performansı düşürür. Tek saat yürütülmüş deyimleri için hazırlanmış yürütme kullanılmamalıdır.Gidiş bir ek ağ dönüş istemciden sunucuya gerektirdiğinden hazırlanmış yürütme doğrudan bir çalıştırma için tek bir yürütme deyiminin yavaştır.Önceki sürümlerinde SQL Server Bu da oluşturur bir geçici olarak saklanan yordam.
Geçici nesneler oluşturmak için hazırlanmış deyimleri kullanılamaz. SQL Server 2000 sonraki veya önceki sürümlerinde SQL Server saklı yordamlar oluşturma seçeneği etkinse. Bu seçeneği açık olan bir geçici saklı yordamına hazırlanmış deyim yerleşik ne zaman yürütüldü. SQLExecute olarak adlandırılır.Yordamı tamamlandığında, geçici saklı yordam yürütme sırasında oluşturulan herhangi bir nesneyi otomatik olarak bırakılır.Aşağıdaki örnekler geçici tablo sonuçlarında biri #sometable hazırlık için saklı yordamlar oluşturma seçeneği etkinse oluşturuluyor:
SQLPrepare(hstmt,
"CREATE TABLE #sometable(cola int, colb char(8))",
SQL_NTS);
SQLExecute(hstmt);
veya
SQLPrepare(hstmt,
"SELECT * FROM Authors INTO #sometable",
SQL_NTS);
SQLExecute(hstmt);
Kullanılan erken bazı ODBC uygulamaları SQLPrepare any saat SQLBindParameter kullanıldı.SQLBindParameter kullanımını gerektirmez.SQLPrepare, kullanılabilir ileSQLExecDirect.Örneğin, SQLExecDirect with SQLBindParameter yürütülen yalnızca saat olan bir saklı yordam çıkış parametreleri ve dönüş kodu alınamıyor.Kullanmayın. SQLPrepare with SQLBindParameter sürece, aynı deyim birden çok kez çalıştırılır.