2011-06-27 17 views
12

ile hazırlanan SQL bir SQL Server veritabanı kullanan bir uygulama sorun gidermek ve çok sayıda sp_execute çağrı görüyorum.Görünüm sp_prepare

sp_prepare çağrılarını bulamıyorum.

Hazırlanan tüm SQL deyimlerini bellekte nasıl denetlersiniz?

+0

aslında sql profiler kullanıyor musunuz? – Rodrigo

+0

Daha çok "sp_execute" çağrısına sahip olmak için [normal/istenen bir durum] (http://www.sql-server-performance.com/forum/threads/sp_prepare-and-sp_execute.14685/) olacaktır. izleme dosyaları 'sp_prepare' çağırır. Hazırlanmış tutamaçlara bağlanmış (parametreli) SQL'i bulmak için, "tutamaç" veya "sorgu planı" türlerinden oluşan sütunlar için SQL Server sistem tablolarının şemalarını incelerdim. – hardmath

cevap

2

yukarıda benim yorumum takibi, ben ilgili bağlantılar bir dizi bulundu:

How can I find out what command sp_execute is running (without using Profiler)

SP_EXECUTE executing... what?

See the query in sp_execute

Microsoft belgelerine sahiptir ama belki zorlu bir ekleme şeyler birlikte (her zamanki gibi). Plan kolu biliniyorsa, bu kullanabilirsiniz:

sys.dm_exec_sql_text (Transact-SQL)

Bu

bir tablo değerli fonksiyondur. Derlenmiş (hazırlanmış) bir planın geçerli bir tanıtıcısı için nesne bağımlılıklarını almak için tablo değerli işlevlerden yararlanan a blog article here'u görebilirsiniz.

13

SQL Server 2008 R2 Profiler'de sp_execute tarafından yürütülen gerçek SQL deyimlerini görmenin bir yolunu arıyordum.

Bunu yapmak için yeni bir izleme oluşturdum ve "Etkinlikler Seçimi" sekmesini tıklattım. "Tüm olayları göster" i seçtim ve Depolanmış Prosedürler> SP: StmtCompleted'i işaretledim. İzi çalıştırdıktan sonra, gerçek SQL ifadelerini görebildim.

4

Bu soruna da girdim. SQL Profiler izlemesi, SQL Profiler izinin çalışmaya başlamasından önce gerçekleştiği için sp_prepare deyimini yakalamıyordu. sys.dm_exec_sql_text belgesine dayanan çeşitli gönderiler, bu saklı yordamı sağlamak için doğru sql_handle veya plan_handle değerini bulamadığım için yardımcı olmadı.

Ben this blog post bir çözüm buldu: ": CacheHit SP" seçmek SQL Profiler, "göster tüm etkinlikler" onay kutusunu tıklayın ve ardından "procedure" altında başlığı. Ortaya çıkan SQL Profiler çıktısında

, bir "SP: CacheHit" göreceksiniz ": başlatılıyor ... sp_executeRPC" deyimi satırı, yakın önbelleğe SQL deyimi içeren.

kullanmakta isteyip istemediğinizi Daha sonra yeniden ve SSMS tam SQL deyimi reexecute yapabilirsiniz

:

exec sp_executesql @stmt=N'{statement from SP:CacheHit}', 
    @params=N'{parameter declaration from SP:CacheHit}', 
    @param1={value}, {...parameters from RPC:Starting sp_execute statement} 
İlgili konular