Share via


SQL Server 2016'da "Saklı yordam hedef tablonun şemasını değiştirdiğinden INSERT EXEC başarısız oluyor" hatası

Bu makale, Sorgu Veri Deposu özelliğini kullanan bir veritabanındaki saklı yordam düzenli aralıklarla başarısız olduğundan oluşan bir sorunu geçici olarak çözmenize yardımcı olur.

Orijinal ürün sürümü: SQL Server 2016
Özgün KB numarası: 4465511

Belirtiler

Aşağıdaki senaryoyu inceleyin:

  • Sorgu Veri Deposu özelliğini kullanan bir Microsoft SQL Server 2016 veritabanınız var.

  • Söz dizimini kullanarak INSERT...EXEC başka bir saklı yordama çağrı yapan bir saklı yordamınız var.

  • Sorgu Veri Deposu özelliği, yapılandırılan boyut üst sınırına yükseldikçe otomatik temizlemeyi düzenli aralıklarla çalıştırır. Buna ek olarak, Sorgu Veri Deposu durumu olarak READ_WRITEREAD_ONLYdeğişir.

Bu senaryoda, üst saklı yordam yürütmesi düzenli aralıklarla başarısız olur ve aşağıdakine benzer bir hata iletisi alırsınız:

Msg 556, Düzey 16, State 2, Line LineNumber
Saklı yordam hedef tablonun şemasını değiştirdiğinden INSERT EXEC başarısız oldu.

Neden

Otomatik temizleme işlemi, planı Sorgu Veri Deposu'nun dışına boşaltır. Sorgu Veri Deposu'ndaki plan eksik olduğundan sorgu yeniden derleme işlemiyle karşılaşır. Ancak, plan hala yordam önbelleğinde bulunur. Tasarım gereği, yeniden derleme işlemi gerçekleştiğinde SQL Server alt yordamın yinelenen yürütülmesini önlemek için 556 hatası oluşturur. Böyle bir yinelenen işlem, yanlış sonuçların döndürülmesine neden olabilir.

Çözüm

SQL Server 2016 için Hizmet Paketi bilgileri

Bu sorun, SQL Server için aşağıdaki hizmet paketinde düzeltildi:

SQL Server 2016 için Service Pack 3

SQL Server için hizmet paketleri hakkında:

Hizmet paketleri birikmelidir. Her yeni hizmet paketi, yeni düzeltmelerle birlikte önceki hizmet paketlerindeki tüm düzeltmeleri içerir. Bu hizmet paketi için en son hizmet paketini ve en son toplu güncelleştirmeyi uygulamanızı öneririz. En son hizmet paketini yüklemeden önce önceki bir hizmet paketini yüklemeniz gerekmez. En son hizmet paketi ve en son toplu güncelleştirme hakkında daha fazla bilgi için aşağıdaki makaledeki Tablo 1'e bakın:

SQL Server ve bileşenlerinin sürüm, sürüm ve güncelleştirme düzeyini belirleme

Geçici Çözüm

Bu soruna geçici bir çözüm bulmak için aşağıdaki adımları uygulayın:

  1. Sorgu Veri Deposu'nun boyutunu artırın. Bu, Sorgu Veri Deposu'nun planı temizleme ve işletim moduna girme READ_ONLY sıklığını veya olasılığını azaltır.

  2. Hata 556'yı yakalamak için kodunuza hata işleme ekleyin ve sorguyu yeniden gönderin INSERT EXEC .

  3. Sorgu Veri Deposu konumundan READ_ONLYduruma döndüğünde yordam önbelleğini READ_WRITE temizleyin.

Ek bilgiler

Microsoft SQL Server 2017'de Sorgu Veri Deposu'nda yapılan değişiklikler nedeniyle bu sorun SQL Server 2017'de oluşmaz. Bu sorun SQL Server 2016'da düzeltilmeyecek.