KB2715289 — Poprawka: nieprawidłowe wyniki podczas konwertowania kolumny DateTimeOffset na kolumnę smalldatetime w programie SQL Server 2008 R2 lub SQL Server 2012 w przypadku wystąpienia indeksu w kolumnie DateTimeOffset

Firma Microsoft rozprowadza poprawki dodatku Service Pack 1 (SP1) dla programu Microsoft SQL Server 2008 R2 jako jeden plik do pobrania. Ponieważ poprawki są zbiorcze, każde nowe wydanie zawiera wszystkie poprawki i wszystkie poprawki zabezpieczeń, które zostały dołączone do wcześniejszego wydania dodatku Service Pack 1 (SP1) dla programu SQL Server 2008 R2.

Symptomy

Rozpatrzmy następujący scenariusz:

  • Kolumna typ danych DateTimeOffset jest dostępna w tabeli w programie Microsoft SQL Server 2008 R2 lub Microsoft SQL Server 2012.

  • Indeks można utworzyć w kolumnie DateTimeOffset .

  • Typ danych DateTimeOffset jest konwertowany na typ danych smalldatetime przy użyciu funkcji Cast lub convert bez argumentu styl lub gdy wartość argumentu styl jest równa 0.

  • Wynik funkcji Cast lub convert jest wykorzystywany w filtrze w zapytaniu Transact-SQL.

  • Uruchom zapytanie Transact-SQL.

W tym scenariuszu wynik zwrócony przez zapytanie jest nieprawidłowy, ponieważ filtr nie działa prawidłowo. Załóżmy na przykład, że kolumna DateTimeOffset o nazwie "date" zawiera następujące wartości:

  • 2011-05-21 23:00:00 -01:00

  • 2011-05-21 23:00:00 +00:00

  • 2011-05-21 23:00:00 +01:00

Uruchom następujące zapytanie:

SELECT Date FROM TestTable WHERE CAST(Date AS smalldatetime)= '2011-05-21 23:00:00'

Wynikiem kwerendy jest zwrócenie tylko jednego wiersza. Jednak oczekiwany wynik powinien zwrócić wiersze dla wszystkich trzech wartości.

Rozwiązanie

Informacje o aktualizacji zbiorczej

Program SQL Server 2012

Poprawka dotycząca tego problemu została wydana po raz pierwszy w aktualizacji zbiorczej 3 dla programu SQL Server 2012. Aby uzyskać więcej informacji na temat tego zbiorczego pakietu aktualizacji, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:

2723749 Pakiet aktualizacji zbiorczej 3 dla programu SQL Server 2012Uwaga Ponieważ kompilacja jest zbiorcza, każdy nowy pakiet poprawek zawiera wszystkie poprawki i wszystkie poprawki zabezpieczeń, które zostały dołączone do poprzedniej wersji poprawki SQL Server 2012. Firma Microsoft zaleca zastosowanie najnowszego wydania poprawki zawierającego tę poprawkę. Aby uzyskać więcej informacji, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:

2692828 Kompilacje programu SQL Server 2012 wydane po wydaniu programu SQL Server 2012 Musisz zastosować poprawkę SQL Server 2012 do instalacji programu SQL Server 2012.

SQL Server 2008 R2 z dodatkiem Service Pack 2

Poprawka dotycząca tego problemu została wydana po raz pierwszy w aktualizacji zbiorczej 1 dla programu SQL Server 2008 R2 z dodatkiem Service Pack 2. Aby uzyskać więcej informacji na temat sposobu uzyskiwania tego zbiorczego pakietu aktualizacji, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:

2720425 Pakiet aktualizacji zbiorczej 1 dla programu SQL Server 2008 R2 z dodatkiem Service Pack 2Uwaga Ponieważ kompilacja jest zbiorcza, każdy nowy pakiet poprawek zawiera wszystkie poprawki i wszystkie poprawki zabezpieczeń dołączone do poprzedniej wersji poprawki SQL Server 2008 R2. Zalecamy zastosowanie najnowszego wydania poprawki zawierającego tę poprawkę. Aby uzyskać więcej informacji, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:

2730301 Kompilacja programu SQL Server 2008 R2 opublikowanych po wydaniu programu SQL Server 2008 R2 z dodatkiem Service Pack 2

SQL Server 2008 R2 z dodatkiem SP1

Poprawka dotycząca tego problemu została wydana po raz pierwszy w aktualizacji zbiorczej 7. Aby uzyskać więcej informacji na temat sposobu uzyskiwania tego zbiorczego pakietu aktualizacji dla programu SQL Server 2008 R2 z dodatkiem Service Pack 1, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:

2703282 Pakiet aktualizacji zbiorczej 7 dla programu SQL Server 2008 R2 z dodatkiem SP1Uwaga Ponieważ kompilacja jest zbiorcza, każdy nowy pakiet poprawek zawiera wszystkie poprawki i wszystkie poprawki zabezpieczeń, które zostały uwzględnione w poprzedniej wersji poprawki SQL Server 2008 R2 z dodatkiem Service Pack 1. Zalecamy zastosowanie najnowszego wydania poprawki zawierającego tę poprawkę. Aby uzyskać więcej informacji, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:

2567616 Kompilacje programu SQL Server 2008 R2 wydane po opublikowaniu programu SQL Server 2008 R2 SP1

Więcej informacji

Aby odtworzyć ten problem, wykonaj następujące czynności:

  1. Uruchom następujące zapytanie, aby utworzyć tabelę z kolumną DateTimeOffset i wstawić niektóre rekordy: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

  2. Uruchom następujące zapytanie, aby sprawdzić, czy wszystkie trzy wartości są wyświetlane poprawnie w zwróconym wyniku:DECLARE @t smalldatetime = '2011-05-21 23:00:00' SELECT dto AS withoutIndex FROM #TestTimeZones WHERE CAST(dto AS smalldatetime)=@t;

  3. Uruchom następujące zapytanie w celu utworzenia indeksu w kolumnie "DTO" i powtórzenia tego samego zapytania: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

  4. Uruchom ponownie zapytanie w kroku 2. Tym razem kwerenda zwróci tylko pojedynczy wiersz.

  5. Uruchom następujące zapytanie, aby usunąć indeks i utworzoną tabelę:DROP INDEX IX_testTimeZones_Dto ON #TestTimeZones; GO DROP TALBE #TestTimeZones; GO

Informacje

Aby uzyskać więcej informacji na temat funkcji CAST i CONVERT, przejdź do następującej witryny MSDN w sieci Web:

Ogólne informacje o funkcjach CAST i CONVERT w programie SQL Server

Stan

Firma Microsoft potwierdziła, że jest to problem występujący w produktach firmy Microsoft wymienionych w sekcji "dotyczy".

Potrzebna dalsza pomoc?

Rozwijaj swoje umiejętności
Poznaj szkolenia
Uzyskuj nowe funkcje w pierwszej kolejności
Dołącz do niejawnych testerów firmy Microsoft

Czy te informacje były pomocne?

Dziękujemy za opinię!

Dziękujemy za opinię! Wygląda na to, że połączenie Cię z jednym z naszych agentów pomocy technicznej pakietu Office może być pomocne.

×