Microsoft distribuie remedieri Microsoft SQL Server 2008 R2 Service Pack 1 (SP1) ca un fișier descărcabil. Deoarece remedierile sunt cumulative, fiecare lansare nouă conține toate remedierile rapide și toate remedierile de securitate care au fost incluse cu versiunea anterioară SQL Server 2008 R2 Service Pack 1 (SP1).
Simptome
Luați în considerare următorul scenariu:
-
Aveți o coloană de tip de date datetimeoffset într-un tabel din Microsoft sql Server 2008 R2 sau în Microsoft sql Server 2012.
-
Creați un index în coloana datetimeoffset .
-
Efectuați conversia tipului de date datetimeoffset la un tip de date smalldatetime utilizând funcția Distributed sau Convert fără argumentul stil sau când valoarea argumentului stil este 0.
-
Rezultatul funcției Distributed sau Convert este utilizat într-un filtru dintr-o interogare Transact-SQL.
-
Rulează interogarea Transact-SQL.
În acest scenariu, rezultatul returnat de interogare este incorect, deoarece filtrul nu funcționează corect. De exemplu, să presupunem că coloana datetimeoffset denumită "dată" conține următoarele valori:
-
2011-05-21 23:00:00 -01:00
-
2011-05-21 23:00:00 +00:00
-
2011-05-21 23:00:00 +01:00
Veți executa următoarea interogare:
SELECT Date FROM TestTable WHERE CAST(Date AS smalldatetime)= '2011-05-21 23:00:00'
Rezultatul interogării returnează un singur rând. Cu toate acestea, rezultatul așteptat ar trebui să returneze rândurile pentru toate cele trei valori.
Rezolvare
Informații despre actualizarea cumulativă
SQL Server 2012
Remedierea pentru această problemă a fost lansată pentru prima dată în actualizarea cumulativă 3 pentru SQL Server 2012. Pentru mai multe informații despre acest pachet de actualizare cumulativă, faceți clic pe următorul număr de articol pentru a vedea articolul în baza de cunoștințe Microsoft:
2723749 Pachetul de actualizare cumulativă 3 pentru SQL Server 2012Notă Deoarece compilările sunt cumulative, fiecare nouă versiune de remediere conține toate remedierile rapide și toate remedierile de securitate care au fost incluse cu versiunea anterioară SQL Server 2012 fix release. Microsoft recomandă să luați în considerare aplicarea celei mai recente versiuni de remediere care conține această remediere rapidă. Pentru mai multe informații, faceți clic pe următorul număr de articol pentru a-l vedea în Baza de cunoștințe Microsoft:
2692828 SQL Server 2012 construiește care au fost lansate după ce s-a lansat SQL Server 2012 Trebuie să aplicați o remediere rapidă SQL Server 2012 la o instalare de SQL Server 2012.
SQL Server 2008 R2 Service Pack 2
Remedierea pentru această problemă a fost lansată pentru prima dată în actualizarea cumulativă 1 pentru SQL Server 2008 R2 Service Pack 2. Pentru mai multe informații despre cum se obține acest pachet de actualizare cumulativă, faceți clic pe următorul număr de articol pentru a vedea articolul în baza de cunoștințe Microsoft:
2720425 Pachetul de actualizare cumulativă 1 pentru SQL Server 2008 R2 Service Pack 2Notă Deoarece compilările sunt cumulative, fiecare nouă versiune de remediere conține toate remedierile rapide și toate remedierile de securitate care au fost incluse cu versiunea anterioară SQL Server 2008 R2 remediată. Vă recomandăm să luați în considerare aplicarea celei mai recente versiuni de remediere care conține această remediere rapidă. Pentru mai multe informații, faceți clic pe următorul număr de articol pentru a-l vedea în Baza de cunoștințe Microsoft:
2730301 SQL Server 2008 R2 construiește care au fost lansate după ce s-a lansat SQL Server 2008 R2 Service Pack 2
SQL Server 2008 R2 SP1
Remedierea pentru această problemă a fost lansată pentru prima dată în actualizarea cumulativă 7. Pentru mai multe informații despre cum se obține acest pachet de actualizare cumulativă pentru SQL Server 2008 R2 Service Pack 1, faceți clic pe următorul număr de articol pentru a vedea articolul în baza de cunoștințe Microsoft:
2703282 Pachetul de actualizare cumulativă 7 pentru SQL Server 2008 R2 SP1Notă Deoarece compilările sunt cumulative, fiecare nouă versiune de remediere conține toate remedierile rapide și toate remedierile de securitate care au fost incluse în versiunea anterioară SQL Server 2008 R2 Service Pack 1 fix release. Vă recomandăm să luați în considerare aplicarea celei mai recente versiuni de remediere care conține această remediere rapidă. Pentru mai multe informații, faceți clic pe următorul număr de articol pentru a-l vedea în Baza de cunoștințe Microsoft:
2567616 SQL Server 2008 R2 construiește care au fost lansate după ce s-a lansat SQL Server 2008 R2 SP1
Mai multe informații
Pentru a reproduce problema, urmați acești pași:
-
Rulează următoarea interogare pentru a crea un tabel cu o coloană datetimeoffset și a insera câteva înregistrări: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
-
Rulați următoarea interogare și puteți vedea că toate cele trei valori sunt listate corect în rezultatul returnat:DECLARE @t smalldatetime = '2011-05-21 23:00:00' SELECT dto AS withoutIndex FROM #TestTimeZones WHERE CAST(dto AS smalldatetime)=@t;
-
Rulează următoarea interogare pentru a crea un index în coloana "DTO" și a repeta aceeași interogare: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
-
Rulează din nou interogarea din pasul 2. De această dată, interogarea returnează un singur rând.
-
Rulează următoarea interogare pentru a șterge indexul și tabelul pe care l-ați creat:DROP INDEX IX_testTimeZones_Dto ON #TestTimeZones; GO DROP TALBE #TestTimeZones; GO
Referințe
Pentru mai multe informații despre funcțiile DISTRIBUTed and CONVERT, accesați următorul site Web MSDN:
Informații generale despre funcțiile DISTRIBUTed and CONVERT în SQL Server
Stare
Microsoft a confirmat că aceasta este o problemă în produsele Microsoft enumerate în secțiunea „Se aplică la”.