Microsoft, Microsoft SQL Server 2008 R2 Service Pack 1 (SP1) düzeltmelerini karşıdan yüklenebilen bir dosya olarak dağıtır. Düzeltmeler birikimli olduğundan, her yeni sürüm önceki SQL Server 2008 R2 Service Pack 1 (SP1) düzeltme sürümüyle birlikte gelen tüm düzeltmeleri ve tüm güvenlik düzeltmelerini içerir.
Belirtiler
Aşağıdaki senaryoyu inceleyin:
-
Microsoft SQL Server 2008 R2 veya Microsoft SQL Server 2012 içinde bir tabloda DateTimeOffset veri türü sütununuz vardır.
-
DateTimeOffset sütununda dizin oluşturabilirsiniz.
-
Cast veya Convert işlevini Stil bağımsız değişkeni olmadan veya Stil bağımsız değişkeninin değeri 0olduğunda, DateTimeOffset veri türünü smalldatetime veri türüne dönüştürürsünüz.
-
Cast veya Convert işlevinin sonucu, Transact-SQL sorgusunda bir filtrede kullanılır.
-
Transact-SQL sorgusunu çalıştırırsınız.
Bu senaryoda, filtre düzgün şekilde çalışmazsa sorgu tarafından döndürülen sonuç yanlıştır. Örneğin, "Tarih" adlı DateTimeOffset sütununun aşağıdaki değerleri içerdiğini varsayalım:
-
2011-05-21 23:00:00 -01:00
-
2011-05-21 23:00:00 +00:00
-
2011-05-21 23:00:00 +01:00
Aşağıdaki sorguyu çalıştırırsınız:
SELECT Date FROM TestTable WHERE CAST(Date AS smalldatetime)= '2011-05-21 23:00:00'
Sorgunun sonucu yalnızca bir satır döndürüyor. Ancak, beklenen sonucun tüm üç değer için satırlar döndürmesi gerekir.
Çözüm
Toplu güncelleştirme bilgileri
SQL Server 2012
Bu sorunla ilgili düzeltme ilk olarak SQL Server 2012 için toplu güncelleştirme 3 ' te yayımlanmıştır. Bu toplu güncelleştirme paketi hakkında daha fazla bilgi için, Microsoft Bilgi Bankası 'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
2723749 SQL Server 2012 için toplu güncelleştirme paketi 3Not Derlemeler birikimli olduğundan, her yeni düzeltme sürümü önceki SQL Server 2012 düzeltmesi sürümüyle birlikte gelen tüm düzeltmeleri ve tüm güvenlik düzeltmelerini içerir. Microsoft, bu düzeltmeyi içeren en son düzeltmeyi uygulamanızı öneririz. Daha fazla bilgi için Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasına tıklayın:
2692828 SQL Server 2012 sonrasında yayınlanan SQL Server 2012 derlemeleri SQL Server 2012 düzeltmesini SQL Server 2012 kurulumuna uygulamalısınız.
SQL Server 2008 R2 Service Pack 2
Bu sorunla ilgili düzeltme ilk olarak SQL Server 2008 R2 Service Pack 2 için toplu güncelleştirme 1 ' de yayımlanmıştır. Bu toplu güncelleştirme paketini edinme hakkında daha fazla bilgi için, Microsoft Bilgi Bankası 'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
2720425 SQL Server 2008 R2 Service Pack 2 için toplu güncelleştirme paketi 1Not Derlemeler birikimli olduğundan, her yeni düzeltme sürümü önceki SQL Server 2008 R2 düzeltmesi sürümüyle birlikte gelen tüm düzeltmeleri ve tüm güvenlik düzeltmelerini içerir. Bu düzeltmeyi içeren en son düzeltme sürümünü uygulamayı düşünebilirsiniz. Daha fazla bilgi için Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasına tıklayın:
2730301 SQL Server 2008 R2 Service Pack 2 ' den sonra yayınlanan SQL Server 2008 R2 derlemeleri
SQL Server 2008 R2 SP1
Bu sorunla ilgili düzeltme ilk olarak toplu güncelleştirme 7 ' de yayımlanmıştır. SQL Server 2008 R2 Service Pack 1 için bu toplu güncelleştirme paketini edinme hakkında daha fazla bilgi için, Microsoft Bilgi Bankası 'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
2703282 SQL Server 2008 R2 SP1 için toplu güncelleştirme paketi 7Not Derlemeler birikimli olduğu için, her yeni düzeltme sürümü önceki SQL Server 2008 R2 Service Pack 1 düzeltme sürümü ile sağlanan tüm düzeltmeleri ve tüm güvenlik düzeltmelerini içerir. Bu düzeltmeyi içeren en son düzeltme sürümünü uygulamayı düşünebilirsiniz. Daha fazla bilgi için Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasına tıklayın:
2567616 SQL Server 2008 R2 SP1 sonrasında yayınlanan SQL Server 2008 R2 derlemeleri yayımlandı
Ek Bilgi
Sorunu yeniden oluşturmak için aşağıdaki adımları izleyin:
-
Aşağıdaki sorguyu, DateTimeOffset sütunu olan bir tablo oluşturmak ve bazı kayıtları eklemek için çalıştırabilirsiniz:CREATE TABLE #TestTimeZones (dto datetimeoffset(0)); GO INSERT INTO #TestTimeZones(dto) VALUES ('2011-05-21 23:00:00 -01:00'), ('2011-05-21 23:00:00 +00:00'), ('2011-05-21 23:00:00 +01:00'); GO
-
Aşağıdaki sorguyu çalıştırın ve döndürülen sonuçlarda tüm üç değerin doğru listelendiğini görebilirsiniz:DECLARE @t smalldatetime = '2011-05-21 23:00:00' SELECT dto AS withoutIndex FROM #TestTimeZones WHERE CAST(dto AS smalldatetime)=@t;
-
"Vseçma" sütununda dizin oluşturmak ve aynı sorguyu tekrarlamak için aşağıdaki sorguyu çalıştırabilirsiniz:CREATE INDEX IX_testTimeZones_Dto ON #TestTimeZones(dto); GO -- Repeat the same query DECLARE @t smalldatetime = '2011-05-21 23:00:00' SELECT dto AS withIndex FROM #TestTimeZones WHERE CAST(dto A smalldatetime)=@t; GO
-
Adım 2 ' de sorguyu yeniden çalıştırır. Bu kez, sorgu yalnızca bir satır döndürür.
-
Aşağıdaki sorguyu çalıştırıp dizini ve oluşturduğunuz tabloyu silin:DROP INDEX IX_testTimeZones_Dto ON #TestTimeZones; GO DROP TALBE #TestTimeZones; GO
Başvurular
CAST ve CONVERT işlevleri hakkında daha fazla bilgi için aşağıdaki MSDN Web sitesine gidin:
SQL Server 'da dönüştürme ve dönüştürme işlevleriyle ilgili genel bilgiler
Durum
Microsoft bu sorunun "Uygulandığı öğe" bölümünde listelenen Microsoft ürünlerinde bulunduğunu onaylamıştır.