Microsoft distribuira ispravke za Microsoft SQL Server 2008 R2 servisni paket 1 (SP1) kao jednu datoteku koja se može preuzeti. Pošto su ispravke kumulativne, svako novo izdanje sadrži sve hitne ispravke i sve bezbednosne ispravke koje su bile uključene u prethodno izdanje sql Server 2008 R2 servisnog paketa 1 (SP1).
Simptomi
Razmotrite sledeći scenario:
-
Imate kolonu tipa podataka tipa podataka datetimeoffset u tabeli u sistemu Microsoft SQL Server 2008 R2 ili Microsoft SQL Server 2012.
-
Indeks kreirate u koloni "Datumoffset".
-
Tip podataka datetimeoffset konvertujete u malidatetime tip podataka pomoću funkcije CAST ili CONVERT bez argumenta stila ili kada je vrednost argumenta stila 0.
-
Rezultat funkcije CAST ili CONVERT se koristi u filteru u Transact-SQL upitu.
-
Pokrenete Transact-SQL upit.
U ovom scenariju, rezultat koji je vratio upit je netačan jer filter ne radi ispravno. Na primer, pretpostavimo da kolona "Datum" koja je nazvana "Datum" sadrži sledeće vrednosti:
-
2011-05-21 23:00:00 -01:00
-
2011-05-21 23:00:00 +00:00
-
2011-05-21 23:00:00 +01:00
Pokrenete sledeći upit:
SELECT Date FROM TestTable WHERE CAST(Date AS smalldatetime)= '2011-05-21 23:00:00'
Rezultat upita vraća samo jedan red. Međutim, očekivani rezultat bi trebalo da vrati redove za sve tri vrednosti.
Rešenje
Kumulativne informacije o ažuriranju
SQL Server 2012
Ispravka za ovaj problem je prvi put objavljena u kumulativnoj ispravci 3 za SQL Server 2012. Za više informacija o ovom paketu kumulativnih ispravki kliknite na sledeći broj članka da biste videli članak u Microsoft bazi znanja:
2723749 Kumulativni paket ispravki 3 za SQL Server 2012Napomena Pošto su verzije kumulativne, svako novo izdanje ispravke sadrži sve hitne ispravke i sve bezbednosne ispravke koje su bile uključene u prethodno izdanje ispravki za SQL Server 2012. Microsoft preporučuje da razmislite o primeni najnovijeg izdanja ispravke koje sadrži ovu hitnu ispravku. Za više informacija kliknite na sledeći broj članka da biste videli članak u Microsoft bazi znanja:
2692828 SQL Server 2012 builds koji su objavljeni nakon što je SQL Server 2012 objavljen Morate primeniti hitnu ispravku za SQL Server 2012 na instalaciju sistema SQL Server 2012.
SQL Server 2008 R2 servisni paket 2
Ispravka za ovaj problem je prvi put objavljena u kumulativnoj ispravci 1 za SQL Server 2008 R2 servisni paket 2. Za više informacija o nabavljanju ovog paketa kumulativnih ispravki kliknite na sledeći broj članka da biste videli članak u Microsoft bazi znanja:
2720425 Kumulativni paket ispravki 1 za SQL Server 2008 R2 servisni paket 2Napomena Pošto su verzije kumulativne, svako novo izdanje ispravke sadrži sve hitne ispravke i sve bezbednosne ispravke koje su bile uključene u prethodno izdanje SQL Server 2008 R2 ispravke. Preporučujemo da razmislite o primeni najnovijeg izdanja ispravke koje sadrži ovu hitnu ispravku. Za više informacija kliknite na sledeći broj članka da biste videli članak u Microsoft bazi znanja:
2730301 SQL Server 2008 R2 builds that were released after SQL Server 2008 R2 Service Pack 2 was released
SQL Server 2008 R2 SP1
Ispravka za ovaj problem je prvi put objavljena u kumulativnoj ispravci 7. Za više informacija o nabavljanju ovog paketa kumulativnih ispravki za SQL Server 2008 R2 servisni paket 1 kliknite na sledeći broj članka da biste videli članak u Microsoft bazi znanja:
2703282 Kumulativni paket ispravki 7 za SQL Server 2008 R2 SP1Napomena Pošto su verzije kumulativne, svako novo izdanje za ispravke sadrži sve hitne ispravke i sve bezbednosne ispravke koje su uključene u prethodno izdanje sql Server 2008 R2 servisnog paketa 1. Preporučujemo da razmislite o primeni najnovijeg izdanja ispravke koje sadrži ovu hitnu ispravku. Za više informacija kliknite na sledeći broj članka da biste videli članak u Microsoft bazi znanja:
2567616 SQL Server 2008 R2 builds that were released after SQL Server 2008 R2 SP1 was released
Više informacija
Da biste reprodukovali problem, sledite ove korake:
-
Pokrenite sledeći upit da biste kreirali tabelu sa kolonom za datum i umetnuli neke zapise: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
-
Pokrenite sledeći upit i možete da vidite da su sve tri vrednosti ispravno navedene u vraćenom rezultatu:DECLARE @t smalldatetime = '2011-05-21 23:00:00' SELECT dto AS withoutIndex FROM #TestTimeZones WHERE CAST(dto AS smalldatetime)=@t;
-
Pokrenite sledeći upit da biste kreirali indeks u koloni "dto" i ponovili isti upit: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
-
Ponovo pokrenite upit u koraku 2. Ovog puta, upit vraća samo jedan red.
-
Pokrenite sledeći upit da biste izbrisali indeks i tabelu koju ste kreirali:DROP INDEX IX_testTimeZones_Dto ON #TestTimeZones; GO DROP TALBE #TestTimeZones; GO
Reference
Za više informacija o funkcijama CAST i CONVERT posetite sledeću MSDN Web lokaciju:
Opšte informacije o funkcijama CAST i CONVERT u sistemu SQL Server
Status
Microsoft je potvrdio da je ovo problem u Microsoft proizvodima koji su navedeni u odeljku "Odnosi se na".