Oprava: Dotaz, který spojuje dvě tabulky na sloupce typ dat smalldatetime, může způsobit nesprávné výsledky SQL Server 2000

Překlady článku Překlady článku
ID článku: 888998 - Produkty, které se vztahují k tomuto článku.
Chyba č: 473085 (SQL Server 8.0)

Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Obsah článku

Souhrn

Tento článek popisuje následující o tomto vydání opravy hotfix:
  • Problémy opravené tímto balíčkem oprav hotfix
  • požadavky pro instalaci balíčku oprav hotfix,
  • nutnost restartování počítače po instalaci balíčku oprav hotfix
  • nahrazení balíčku oprav hotfix jiným balíčkem oprav hotfix
  • zda je nutné provedení změn v registru,
  • soubory obsažené v balíčku oprav hotfix

Příznaky

V Microsoft SQL Server 2000 s hotfix sestavení 8.00.0837 nebo vyšší verze může spustit dotaz, který spojuje dvě tabulky pomocí equijoin na sloupce typ dat smalldatetime. Equijoin je spojení, kde jsou kombinovány a přidány do sady při existují stejné hodnoty ve sloupcích spojených výsledků řádků ze dvou tabulek. Pokud je podmínka filtru s literál na tyto sloupce, může dotaz vrátit nesprávné výsledky. Následující dotaz je příkladem ohrožený dotazu:
declare @Date datetime
set @Date = '2005-01-01'

Select t1.c1, t2.c2 
from 
t1 Join t2 on t1.smalldatetime_column = t2.smalldatetime_column
Where t1.smalldatetime_column = @Date
seznam všech veřejně vydané SQL Server 2000 Post-Service Pack 3a hotfix získáte v následujícím článku databáze Microsoft Knowledge Base:
810185Aktualizace SQL Server 2000 hotfix pro SQL Server 2000 Service Pack 3 a 3a

Příčina

K tomuto problému dochází, protože SQL Server 2000 hotfix sestavení 8.00.0837 optimalizuje dotazy zahrnout předpokládané predikátu hodnotou to možné. Protože parametr předpokládaných nesprávně používá 4bajtové smalldatetime Konstanta místo konstanta datetime 8 bajtů, nesprávné vyhodnocení porovnání dochází v době spuštění.

Řešení

Informace o opravě hotfix

K dispozici je podporovaná oprava hotfix od společnosti Microsoft. Tato oprava hotfix je však určena pouze k opravě problému popsanému v tomto článku. Použijte tuto opravu hotfix pouze u systémů, kde dochází k tomuto konkrétnímu problému.

Pokud je oprava hotfix k dispozici ke stažení, v horní části tohoto článku je sekce "Hotfix stažení k dispozici". Není-li tato část uvedena, vyžádejte si tuto opravu hotfix od oddělení služeb zákazníkům a podpory společnosti Microsoft.

Poznámka: Pokud vyskytnout další problémy nebo jakékoli řešení potíží je vyžadován, pravděpodobně budete muset vytvořit zvláštní požadavek na službu. Výdaje na technickou podporu se týkají dalších otázek a problémů, které nelze vyřešit pomocí této opravy konkrétní opravy hotfix. Navštivte následující web společnosti Microsoft pro získání telefonního čísla na Zákaznické centrum, nebo pokud chcete vytvořit samostatnou žádost o podporu:
http://support.microsoft.com/contactus/?ws=support
Poznámka: Zobrazí formulář "Hotfix stažení k dispozici" jazyky, pro které je oprava hotfix k dispozici. Pokud váš jazyk není zobrazen, oprava hotfix není k dispozici pro daný jazyk.

Požadavky

Musíte nainstalovat SQL Server 2000 Service Pack 3. Další informace o tom, jak získat SQL Server 2000 Service Pack 3, Microsoft Knowledge Base:
290211Jak získat nejnovější aktualizaci Service Pack pro SQL Server 2000
Dále tato oprava hotfix vyžaduje mít také opravy hotfix sestavení 2000.80.977 nainstalován SQL Server 2000. Další informace o opravě hotfix SQL Server 2000 Post SP3a sestavení 2000.80.977, Microsoft Knowledge Base:
888007Při pokusu o instalaci opravy hotfix SQL Server 2000 po aktualizaci Service Pack 3 se zobrazí chybová zpráva "the produktu nemá nainstalována požadovaná aktualizace"

Informace o restartování

Máte po použití této opravy hotfix restartujte službu SQL Server.

Informace o souboru opravy hotfix

Tato oprava hotfix obsahuje pouze soubory, které jsou nutné k opravě problémů uvedených v tomto článku. Oprava hotfix nemusí obsahovat všechny soubory nutné k plné aktualizaci produktu na nejnovější verzi.

Anglická verze této opravy hotfix má následující (nebo pozdější) atributy souborů. Data a časy jednotlivých souborů jsou uvedeny ve formátu UTC (Coordinated Universal Time). Pokud zobrazíte informace o souboru, bude převedena na místní čas. Rozdíl mezi místním ČASEM a najít, použijte kartu časové pásmo v ovládacím panelu Datum a čas.
   Date         Time   Version        Size       File name
   ----------------------------------------------------------
   02-Nov-2004  06:02  2000.80.985.0    664,128  Autoplt.dll
   02-Nov-2004  06:02  2000.80.985.0     78,400  Console.exe      
   02-Nov-2004  06:02  2000.80.985.0    332,352  Ctasksui.dll
   02-Nov-2004  06:02  2000.80.985.0    315,968  Custtask.dll
   02-Nov-2004  06:02  2000.80.985.0     33,340  Dbmslpcn.dll
   02-Nov-2004  06:02  2000.80.985.0  1,905,216  Dtspkg.dll       
   02-Nov-2004  06:02  2000.80.985.0    528,960  Dtspump.dll
   02-Nov-2004  06:02  2000.80.985.0     41,536  Dtsrun.exe
   02-Nov-2004  06:02  2000.80.985.0  1,557,052  Dtsui.dll
   02-Nov-2004  06:02  2000.80.985.0    639,552  Dtswiz.dll       
   02-Nov-2004  06:02  2000.80.985.0    352,828  Isqlw.exe        
   02-Nov-2004  06:02  2000.80.985.0     82,492  Itwiz.exe        
   02-Nov-2004  06:02  2000.80.985.0     90,692  Msgprox.dll      
   19-May-2004  23:43  8.11.40209.0     209,408  Mssdi98.dll      
   02-Nov-2004  06:02  2000.80.985.0     62,024  Odsole70.dll     
   02-Nov-2004  06:03  2000.80.985.0     25,144  Opends60.dll     
   02-Nov-2004  05:35                    17,576  Opends60.lib
   02-Nov-2004  06:02  2000.80.985.0     57,904  Osql.exe
   02-Nov-2004  06:02  2000.80.985.0    279,104  Pfutil80.dll     
   02-Nov-2004  06:02  2000.80.985.0    143,940  Qrdrsvc.exe      
   02-Nov-2004  06:02  2000.80.985.0    221,768  Replprov.dll     
   02-Nov-2004  06:03  2000.80.985.0    307,784  Replrec.dll      
   02-Nov-2004  06:03  2000.80.985.0    287,304  Rinitcom.dll     
   02-Nov-2004  06:03  2000.80.985.0     78,416  Sdiclnt.dll      
   02-Nov-2004  06:03  2000.80.985.0     66,112  Semmap.dll       
   02-Nov-2004  06:03  2000.80.985.0     57,916  Semnt.dll
   02-Nov-2004  06:03  2000.80.985.0    492,096  Semobj.dll
   02-Nov-2004  06:02  2000.80.985.0     53,832  Snapshot.exe
   02-Nov-2004  06:01  2000.80.985.0     28,672  Sqlagent.dll
   02-Nov-2004  06:02  2000.80.985.0    311,872  Sqlagent.exe
   02-Nov-2004  06:01  2000.80.985.0    168,001  Sqlakw32.dll
   02-Nov-2004  05:05                     4,352  Sqlakw32.lib
   02-Nov-2004  06:03  2000.80.985.0     33,344  Sqlctr80.dll     
   02-Nov-2004  06:03  2000.80.985.0    815,676  Sqldata.dll      
   02-Nov-2004  06:03  2000.80.985.0  4,215,360  Sqldmo.dll       
   02-Nov-2004  06:02                    25,172  Sqldumper.exe    
   02-Nov-2004  06:02  2000.80.985.0    156,224  Sqlmaint.exe     
   02-Nov-2004  06:03  2000.80.985.0    180,792  Sqlmap70.dll     
   02-Nov-2004  06:03  2000.80.985.0    188,992  Sqlmmc.dll
   02-Nov-2004  06:03  2000.80.985.0    401,984  Sqlqry.dll       
   02-Nov-2004  06:03  2000.80.985.0     57,920  Sqlrepss.dll     
   02-Nov-2004  06:03  2000.80.985.0  7,712,849  Sqlservr.exe     
   02-Nov-2004  06:03  2000.80.985.0    590,396  Sqlsort.dll      
   02-Nov-2004  06:03  2000.80.985.0     45,644  Sqlvdi.dll
   02-Nov-2004  06:03  2000.80.985.0    106,588  Sqsrvres.dll
   02-Nov-2004  06:03  2000.80.985.0     33,340  Ssmsgnet.dll     
   02-Nov-2004  06:03  2000.80.985.0     33,340  Ssmslpcn.dll     
   02-Nov-2004  06:03  2000.80.985.0     33,340  Ssmsqlgc.dll     
   02-Nov-2004  06:03  2000.80.985.0     33,340  Ssmssnet.dll     
   02-Nov-2004  06:03  2000.80.985.0     82,492  Ssnetlib.dll
   02-Nov-2004  06:03  2000.80.985.0     25,148  Ssnmpn70.dll
   02-Nov-2004  06:03  2000.80.985.0    123,456  Stardds.dll
   02-Nov-2004  06:03  2000.80.985.0    158,240  Svrnetcn.dll     
   02-Nov-2004  06:02  2000.80.985.0     76,416  Svrnetcn.exe     
   02-Nov-2004  06:03  2000.80.985.0     49,228  Ums.dll          
   02-Nov-2004  06:03  2000.80.985.0     74,304  Xplog70.dll      
   02-Nov-2004  06:03  2000.80.985.0     98,872  Xpweb70.dll      
   17-Nov-2004  18:13                     6,615  Hotfix1.inf
   17-Nov-2004  18:13                     2,471  Hotfix2.inf
   30-Sep-2003  22:34  8.0.21213.0      352,256  Msvcr71.dll      
   30-Sep-2003  22:34  2000.80.796.0     57,904  Osql.exe
   30-Sep-2003  22:34  2000.80.534.0    127,548  Sqdedev.dll      
   30-Sep-2003  22:34  2000.80.194.0    180,290  Sqlunirl.dll     
   02-Nov-2004  05:01  2000.80.985.0    159,813  Replres.rll
   02-Nov-2004  05:28  2000.80.985.0    172,032  Semobj.rll
   02-Nov-2004  04:53  2000.80.985.0     28,672  Sqlevn70.rll
   02-Nov-2004  05:17  2000.80.985.0    479,232  Sqlmmc.rll
Poznámka: Vzhledem k závislostem souborů může nejnovější oprava hotfix, která obsahuje tyto soubory obsahovat také další soubory.

Jak potíže obejít

Chcete-li tento problém vyřešit, použijte jednu z následujících metod:
  • Funkci cast přetypovat sloupci datetime jako konstanta smalldate.
  • Vytvořit bez clusterů index na sloupci smalldatetime.

Prohlášení

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.

Další informace

Kroky pro reprodukci tohoto chování

Následující příkazy Transact SQL na SQL Server 2000 s hotfix sestavení 8.00.0837 a novější verze nesprávně vrátit 0 řádků:
select @@version
go
 
Create Table t1 (
      c1 SmallDateTime,
      c2 varchar(15)
)
go
 
Create Table t2 (
      c1 smalldatetime,
      c2 Varchar(15)
)
go
 
Insert Into t1 Values ('2004-10-21','abc')
Insert Into t1 Values ('2004-10-21','efg')
 
Insert Into t2 Values ('2004-10-21', 'ddd') 
Insert Into t2 Values ('2004-10-21', 'eee') 
 
 
declare @Date datetime
set @Date = '2004-10-21'
 
Select t1.*, t2.*
from t1 join t2 
On t1.c1 = t2.c1
Where t1.c1 = @Date
go
 
drop table t1
drop table t2
go 
správné výsledky jsou následující čtyři řádky. Tyto řádky jsou získávány v počítači se systémem SQL Server 2000 s hotfix sestavení 8.00.0760,.0818, a sestavení prostřednictvím sestavení.0836.
c1                                                     c2              c1                                                     c2              
------------------------------------------------------ --------------- ------------------------------------------------------ --------------- 
2004-10-21 00:00:00                                    abc             2004-10-21 00:00:00                                    ddd
2004-10-21 00:00:00                                    abc             2004-10-21 00:00:00                                    eee
2004-10-21 00:00:00                                    efg             2004-10-21 00:00:00                                    ddd
2004-10-21 00:00:00                                    efg             2004-10-21 00:00:00                                    eee
Další informace o pojmenování schématu aktualizace SQL Server klepněte na následující číslo článku databáze Microsoft Knowledge Base:
822499Nové schéma přidělování názvů pro balíčky aktualizací softwaru Microsoft SQL Server
Další informace o terminologii používané při jeho opravuje software po jeho vydání Microsoft klepněte na následující číslo článku databáze Microsoft Knowledge Base:
824684Popis standardní terminologie používané při popisu aktualizací softwaru společnosti Microsoft

Vlastnosti

ID článku: 888998 - Poslední aktualizace: 2. listopadu 2007 - Revize: 1.5
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft SQL Server 2000 Desktop Engine (MSDE) SP3
  • Microsoft SQL Server 2000 Service Pack 3
  • Microsoft SQL Server 2000 Personal Edition Service Pack 3
  • Microsoft SQL Server 2000 Service Pack 3
  • Microsoft SQL Server 2000 Service Pack 3
Klíčová slova: 
kbmt kbautohotfix kbsqlserv2000presp4fix kbbug kbfix kbhotfixserver kbqfe KB888998 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:888998

Dejte nám zpětnou vazbu

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com