Přihlásit se pomocí účtu Microsoft
Přihlaste se nebo si vytvořte účet.
Dobrý den,
Vyberte jiný účet.
Máte více účtů.
Zvolte účet, pomocí kterého se chcete přihlásit.

Společnost Microsoft distribuuje Microsoft SQL Server 2008 R2 Service Pack 1 (SP1) jako jeden soubor ke stažení. Protože jsou opravy kumulativní, každá nová verze obsahuje všechny opravy hotfix a všechny opravy zabezpečení, které byly zahrnuté v předchozí verzi systému SQL Server 2008 R2 Service Pack 1 (SP1).

Příznaky

Zvažte následující scénář:

  • V tabulce Microsoft SQL serveru 2008 R2 nebo Microsoft SQL Server 2012 máte sloupec datového typu DateTimeOffset .

  • Index vytvoříte ve sloupci DateTimeOffset .

  • Datový typ DateTimeOffset převedete na datový typ smalldatetime pomocí funkce cast nebo Convert bez argumentu style , nebo pokud je argumentem style hodnota 0.

  • Výsledek funkce cast nebo Convert se používá ve filtru v dotazu Transact-SQL.

  • Spustíte dotaz Transact-SQL.

V tomto scénáři je výsledek vrácený dotazem nesprávný, protože filtr nefunguje správně. Předpokládejme například, že sloupec DateTimeOffset s názvem "date" obsahuje následující hodnoty:

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

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

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

Spustíte následující dotaz:

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

Výsledek dotazu vrátí jenom jeden řádek. Očekávaný výsledek by měl vracet řádky pro všechny tři hodnoty.

Řešení

Informace o kumulativní aktualizaci

SQL Server 2012

Oprava pro tento problém byla poprvé vydána v kumulativní aktualizaci 3 pro SQL Server 2012. Další informace o tomto kumulativním balíčku aktualizací najdete v následujícím článku znalostní báze Microsoft Knowledge Base:

2723749 Kumulativní balíček aktualizací 3 pro SQL Server 2012Poznámka Vzhledem k tomu, že buildy jsou kumulativní, každá nová oprava obsahuje všechny opravy hotfix a všechny opravy zabezpečení, které byly součástí předchozího SQL serveru 2012 Oprava. Společnost Microsoft doporučuje zvážit použití nejnovější opravy, která obsahuje tuto opravu hotfix. Další informace naleznete v následujícím článku znalostní báze Microsoft Knowledge Base:

2692828 Buildy SQL Server 2012, které byly vydány po vydání SQL Server 2012 Na instalaci SQL serveru 2012 musíte použít opravu hotfix systému SQL Server 2012.

SQL Server 2008 R2 Service Pack 2

Oprava pro tento problém byla poprvé vydána v kumulativní aktualizaci 1 pro SQL Server 2008 R2 Service Pack 2. Další informace o tom, jak získat tento kumulativní balíček aktualizací, najdete v následujícím článku znalostní báze Microsoft Knowledge Base:

2720425 Kumulativní aktualizace 1 pro SQL Server 2008 R2 Service Pack 2Poznámka Vzhledem k tomu, že buildy jsou kumulativní, každá nová oprava obsahuje všechny opravy hotfix a všechny opravy zabezpečení, které byly součástí předchozího SQL serveru 2008 R2 fix release. Doporučujeme zvážit použití nejnovější opravy, která obsahuje tuto opravu hotfix. Další informace naleznete v následujícím článku znalostní báze Microsoft Knowledge Base:

2730301 Sestavení SQL Server 2008 R2, která byla vydána po SQL serveru 2008 R2 Service Pack 2, byla vydána

SQL Server 2008 R2 SP1

Oprava pro tento problém byla poprvé vydána v kumulativní aktualizaci 7. Další informace o tom, jak získat tento kumulativní balíček aktualizací pro SQL Server 2008 R2 Service Pack 1, najdete v následujícím článku znalostní báze Microsoft Knowledge Base:

2703282 Kumulativní balíček aktualizací 7 pro SQL Server 2008 R2 SP1Poznámka Vzhledem k tomu, že buildy jsou kumulativní, každá nová oprava obsahuje všechny opravy hotfix a všechny opravy zabezpečení, které byly součástí předchozí verze systému SQL Server 2008 R2 Service Pack 1 – oprava. Doporučujeme zvážit použití nejnovější opravy, která obsahuje tuto opravu hotfix. Další informace naleznete v následujícím článku znalostní báze Microsoft Knowledge Base:

2567616 Buildy SQL Server 2008 R2 vydaná po vydání SQL serveru 2008 R2 SP1

Další informace

Problém vyřešíte takto:

  1. Spuštěním následujícího dotazu vytvoříte tabulku se sloupcem DateTimeOffset a vložíte některé záznamy: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. Spusťte následující dotaz a uvidíte, že všechny tři hodnoty jsou ve výsledku uvedeny správně:DECLARE @t smalldatetime = '2011-05-21 23:00:00' SELECT dto AS withoutIndex FROM #TestTimeZones WHERE CAST(dto AS smalldatetime)=@t;

  3. Spuštěním následujícího dotazu vytvoříte index ve sloupci "DTO" a zopakujete dotaz: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. Spusťte dotaz znovu v kroku 2. Dotaz pak vrátí jenom jeden řádek.

  5. Odstraňte index a tabulku, kterou jste vytvořili, spuštěním následujícího dotazu:DROP INDEX IX_testTimeZones_Dto ON #TestTimeZones; GO DROP TALBE #TestTimeZones; GO

Odkazy

Další informace o funkcích CAST a CONVERT najdete na následujícím webu MSDN:

Obecné informace o funkcích CAST a CONVERT na SQL serveru

Stav

Společnost Microsoft potvrzuje, že se jedná o problém v produktech této společnosti, které jsou uvedeny v části Informace v tomto článku jsou určeny pro produkt.

Potřebujete další pomoc?

Chcete další možnosti?

Prozkoumejte výhody předplatného, projděte si školicí kurzy, zjistěte, jak zabezpečit své zařízení a mnohem více.

Komunity vám pomohou klást otázky a odpovídat na ně, poskytovat zpětnou vazbu a vyslechnout odborníky s bohatými znalostmi.

Byly tyto informace užitečné?

Jak jste spokojeni s kvalitou jazyka?
Co ovlivnilo váš názor?
Po stisknutí tlačítka pro odeslání se vaše zpětná vazba použije k vylepšování produktů a služeb Microsoftu. Váš správce IT bude moci tato data shromažďovat. Prohlášení o zásadách ochrany osobních údajů.

Děkujeme vám za zpětnou vazbu.

×