Microsoft hesabıyla oturum açın
Oturum açın veya hesap oluşturun.
Merhaba,
Farklı bir hesap seçin.
Birden çok hesabınız var
Oturum açmak istediğiniz hesabı seçin.

Belirtiler

Microsoft SQL Server 2008 çalıştıran bir bilgisayarda, aşağıdaki senaryoları dikkate alın.

Senaryo 1

WıTH deyimini kullanarak ortak bir tablo ifadesi (CTE) belirtirsiniz. Örneğin, aşağıdaki sorguyu çalıştırırsınız.

WITH common_table_expression AS (SELECT * FROM sys.objects)(SELECT * FROM common_table_expression)

Ardından, bu sorguyu çalıştırırsınız.

SELECT *FROM sys.dm_exec_query_statsWHERE statement_start_offset > statement_end_offsetANDstatement_end_offset <> -1

Bu senaryoda, bu sorgu için önbelleğe alınmış sorgu planı yanlış statement_start_offset ve statement_end_offset değerlerini depolar. Özellikle, sys.dm_exec_query_stats dinamik yönetim görünümünü (DMV) çalıştırdığınızda statement_end_offset değerinin statement_start_offset değerinden küçük olduğunu fark edebilirsiniz. Bu sorun nedeniyle, rapor statement_start_offset değerinin her zaman statement_stop_offset değerinden küçük olduğunu varsaydığı zaman performans raporu başarısız olabilir.

Senaryo 2

WıTH deyimini kullanarak ortak bir tablo ifadesi belirtirsiniz ve yeniden derle seçeneğini kullanırsınız. Örneğin, SQL Server 2008 'de aşağıdaki komutu kullanarak bir işlev oluşturursunuz.

CREATE FUNCTION function1() RETURNS int ASBEGINDECLARE @x intSET @x=1;WITH common_table_expression AS (SELECT @x AS column1) (SELECT @x=column1 FROM common_table_expression) OPTION(RECOMPILE)RETURN @xEND

"Dbo. function1 ()" sorgusunu çalıştırdığınızda, aşağıdaki hata iletisini alırsınız:

Geçerli komutta önemli bir hata oluştu. Sonuçlar (varsa) atılır.

Ayrıca, SQL Server ağır sunucu trafiği yaşanıyorsa bu hata yeniden derleme seçeneği olmadan da oluşabilir.

Senaryo 3

WıTH deyimini kullanarak ortak bir tablo ifadesi belirtirsiniz. WıTH deyiminde, varolmayan bir tabloyu belirtirsiniz. Örneğin, aşağıdaki sorguyu çalıştırırsınız.

WITH computed_table (id) AS(SELECT id FROM this_table_does_not_exist) (SELECT id FROM dbo.computed_table) GO

Bu sorguyu çalıştırdığınızda, eksik tablo için bir hata almayacaksınız.

Neden

Bu sorunlar, WıTH ifadesiyle takip edilen bir SELECT deyiminin hatalı işlenmesi nedeniyle oluşur. WıTH deyimi aşağıdaki söz dizimini kullanır.

WITH common_table_expression AS(CTE_query_definition)

Bu ifade daha sonra belirtilen ortak tablo ifadesi adına atanmış bir sonuç kümesi oluşturur. Ardından, bu deyimi SELECT deyimiyle takip edebilirsiniz. Bu ikinci ifade parantez içine alınır ve sonuçlar üzerinde bir işlem gerçekleştirmeyi denediğinizde veya dinamik yönetim görünümü sys.dm_exec_query_stats çalıştırmayı denediğinizde yanlış sonuçlar veya hata alırsınız.

Çözüm

Hizmet paketi bilgileri Bu sorunu çözmek için, en son SQL Server 2008 hizmet paketini edinin. Daha fazla bilgi için Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasına tıklayın:

968382 En son SQL Server 2008 hizmet paketini edinme

Geçici Çözüm

Bu sorunları geçici olarak çözmek için, ortak tablo ifadesinin altındaki ifadeden ayraçları kaldırmanız gerekir. Örneğin, bu tür ayraçları kullanan deyimle aşağıdakileri göz önünde bulundurun.

WITH common_table_expression AS (SELECT *FROM sys.objects)(SELECT * FROM common_table_expression)

Bu sorunları geçici olarak çözmek için, bu ayraçları kullanmayan aşağıdaki deyimle değiştirin.

WITH common_table_expression AS (SELECT *FROM sys.objects)SELECT * FROM common_table_expressio

Durum

Microsoft bu sorunun, "Aşağıdakilere uygulanır" bölümünde listelenen Microsoft ürünlerinde bulunduğunu onaylamıştır. Bu sorun ilk olarak SQL Server 2008 Service Pack 2 (SP2) ile düzeltildi.

Ek Bilgi

WıTH deyimini ortak bir tablo ifadesiyle birlikte kullanma hakkında daha fazla bilgi için aşağıdaki MSDN Web sayfasını ziyaret edin:

Common_table_expression Ile (Transact-SQL)Sys.dm_exec_query_stats hakkında daha fazla bilgi için aşağıdaki MSDN Web sayfasını ziyaret edin:

sys.dm_exec_query_stats (Transact-SQL)

Daha fazla yardıma mı ihtiyacınız var?

Daha fazla seçenek mi istiyorsunuz?

Abonelik avantajlarını keşfedin, eğitim kurslarına göz atın, cihazınızın güvenliğini nasıl sağlayacağınızı öğrenin ve daha fazlasını yapın.

Topluluklar, soru sormanıza ve soruları yanıtlamanıza, geri bildirimde bulunmanıza ve zengin bilgiye sahip uzmanlardan bilgi almanıza yardımcı olur.

Bu bilgi yararlı oldu mu?

Dil kalitesinden ne kadar memnunsunuz?
Deneyiminizi ne etkiledi?
Gönder’e bastığınızda, geri bildiriminiz Microsoft ürün ve hizmetlerini geliştirmek için kullanılır. BT yöneticiniz bu verileri toplayabilecek. Gizlilik Bildirimi.

Geri bildiriminiz için teşekkürler!

×