"Microsoft" platina "Microsoft SQL Server 2008 R2" 1 pakeitimų paketo (SP1) pataisymus kaip vieną atsisiunčiamą failą. Kadangi pataisos yra kumuliacinės, kiekviena nauja versija yra visos karštosios pataisos ir visos saugos pataisos, kurios buvo pridėtos prie ankstesnės SQL serverio 2008 R2 1 pakeitimų paketo (SP1) pataisų leidimo.
Simptomai
Apsvarstykite šį scenarijų:
-
"Microsoft SQL Server 2008 R2" arba "Microsoft SQL Server 2012" lentelėje yra " DateTimeOffset " duomenų tipo stulpelis.
-
Galite sukurti indeksą, esantį stulpelyje DateTimeOffset .
-
Galite konvertuoti duomenų tipą DateTimeOffset į smalldatetime duomenų tipą naudodami funkciją cast arba CONVERT nenaudodami stiliaus argumento arba kai stiliaus argumento reikšmė yra 0.
-
Funkcijos cast arba CONVERT rezultatas yra naudojamas "Transact-SQL" užklausos filtre.
-
Vykdote Transact-SQL užklausą.
Tokiu atveju užklausa, kurią pateikia užklausa, yra neteisinga, nes filtras veikia netinkamai. Pavyzdžiui, Tarkime, kad DateTimeOffset stulpelis, pavadintas "date", turi šias reikšmes:
-
2011-05-21 23:00:00 -01:00
-
2011-05-21 23:00:00 +00:00
-
2011-05-21 23:00:00 +01:00
Vykdote šią užklausą:
SELECT Date FROM TestTable WHERE CAST(Date AS smalldatetime)= '2011-05-21 23:00:00'
Užklausos rezultatas pateikia tik vieną eilutę. Tačiau laukiamas rezultatas turėtų pateikti visų trijų reikšmių eilutes.
Sprendimas
Kaupiamojo naujinimo informacija
SQL serverio 2012
Šios problemos pataisa pirmą kartą išleista 3 kaupiamąjį naujinimą, skirtą "SQL Server 2012". Daugiau informacijos apie šį kaupiamųjų naujinimų paketą rasite spustelėję toliau nurodytą straipsnio numerį ir peržiūrėkite straipsnį "Microsoft" žinių bazėje:
2723749 "SQL Server 2012" kaupiamojo naujinimo paketas 3Pastaba Kadangi komponavimo versijos yra kumuliacinės, kiekviena nauja pataisų versija yra visos karštosios pataisos ir visos saugos pataisos, kurios buvo pridėtos prie ankstesnio SQL serverio 2012 pataisų leidimo. "Microsoft" rekomenduoja apsvarstyti naujausių pataisų leidimų, kuriuose yra šios karštosios pataisos, taikymą. Jei reikia daugiau informacijos, spustelėkite toliau esantį straipsnio numerį ir peržiūrėkite straipsnį "Microsoft" žinių bazėje:
2692828 "SQL Server 2012" komponavimo versijos, išleistos po "SQL Server" 2012 išleidimo SQL serverio 2012 karštąją pataisą turite taikyti "SQL Server 2012" įdiegčiai.
"SQL Server 2008 R2" 2 pakeitimų paketas
Ši problema buvo pirmą kartą išleista Kaupiamasis naujinimas 1 SQL serverio 2008 R2 Service Pack 2. Jei norite gauti daugiau informacijos apie tai, kaip gauti šį kaupiamąjį naujinimų paketą, spustelėkite toliau pateiktą straipsnio numerį ir peržiūrėkite straipsnį "Microsoft" žinių bazėje:
2720425 Kaupiamojo naujinimo paketas 1, skirtas "SQL Server 2008 R2" 2 pakeitimų paketuiPastaba Kadangi komponavimo versijos yra kumuliacinės, kiekviena nauja pataisų versija yra visos karštosios pataisos ir visos saugos pataisos, kurios buvo pridėtos prie ankstesnio SQL serverio 2008 R2 pataisų leidimo. Rekomenduojame apsvarstyti, kaip taikyti naujausią pataisų leidimą, kuriame yra šios karštosios pataisos. Jei reikia daugiau informacijos, spustelėkite toliau esantį straipsnio numerį ir peržiūrėkite straipsnį "Microsoft" žinių bazėje:
2730301 SQL serverio 2008 R2 komponavimo versijos, išleistos po "SQL Server 2008 R2" 2 pakeitimų paketo išleidimo
SQL serverio 2008 R2 SP1
Šios problemos taisymas pirmą kartą buvo išleistas Kaupiamasis naujinimas 7. Jei norite gauti daugiau informacijos apie tai, kaip gauti šį kaupiamojo naujinimo paketą, skirtą "SQL Server 2008 R2" 1 pakeitimų paketui, spustelėkite toliau pateiktą straipsnio numerį ir peržiūrėkite straipsnį "Microsoft" žinių bazėje:
2703282 Kaupiamojo naujinimo paketas 7, skirtas "SQL Server" 2008 R2 SP1Pastaba Kadangi komponavimo versijos yra kumuliacinės, kiekviena nauja pataisų versija yra visos karštosios pataisos ir visos saugos pataisos, kurios buvo pridėtos prie ankstesnės SQL serverio 2008 R2 1 pakeitimų paketo pataisos leidimo. Rekomenduojame apsvarstyti, kaip taikyti naujausią pataisų leidimą, kuriame yra šios karštosios pataisos. Jei reikia daugiau informacijos, spustelėkite toliau esantį straipsnio numerį ir peržiūrėkite straipsnį "Microsoft" žinių bazėje:
2567616 SQL serverio 2008 R2 stato, buvo paleistas po to, kai buvo išleistas SQL Server 2008 R2 SP1
Daugiau informacijos
Norėdami atkurti problemą, atlikite šiuos veiksmus:
-
Vykdykite šią užklausą, kad sukurtumėte lentelę naudodami stulpelį DateTimeOffset ir įterptumėte kai kuriuos duomenis: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
-
Vykdykite šią užklausą ir galite matyti, kad pateiktuose rezultatuose teisingai nurodytos visos trys reikšmės:DECLARE @t smalldatetime = '2011-05-21 23:00:00' SELECT dto AS withoutIndex FROM #TestTimeZones WHERE CAST(dto AS smalldatetime)=@t;
-
Vykdykite šią užklausą, kad sukurtumėte indeksą "DTO" stulpelyje ir pakartoti tą pačią užklausą: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
-
Paleiskite užklausą atlikdami 2 veiksmą dar kartą. Šiuo metu užklausa pateikia tik vieną eilutę.
-
Vykdykite šią užklausą, kad panaikintumėte indeksą ir jūsų sukurtą lentelę:DROP INDEX IX_testTimeZones_Dto ON #TestTimeZones; GO DROP TALBE #TestTimeZones; GO
Nuorodos
Daugiau informacijos apie funkcijas CAST ir CONVERT rasite apsilankę šioje MSDN svetainėje:
Statusą
"Microsoft" patvirtino, kad tai yra "Microsoft" produktų, išvardytų skyriuje "taikoma", problema.