Aktualizace aplikace z nativního klienta SQL Serveru 2005
platí pro:SQL ServerAzure SQL Databaseazure SQL Managed InstanceAzure Synapse AnalyticsPlatform Platform System (PDW)
Důležitý
SQL Server Native Client (SNAC) není dodáván s:
- SQL Server 2022 (16.x) a novější verze
- SQL Server Management Studio 19 a novější verze
Pro vývoj nových aplikací se nedoporučuje nativní klient SQL Serveru (SQLNCLI nebo SQLNCLI11) a starší zprostředkovatel Microsoft OLE DB pro SQL Server (SQLOLEDB).
Pro nové projekty použijte jeden z následujících ovladačů:
Informace o SQLNCLI, které se dodává jako součást databázového stroje SQL Serveru (verze 2012 až 2019), naleznete v tomto support lifecycle exception.
Toto téma popisuje zásadní změny v nativním klientovi SQL Serveru od sql Serveru Native Client v SYSTÉMU SQL Server 2005 (9.x).
Při upgradu ze služby Microsoft Data Access Components (MDAC) na nativního klienta SQL Serveru se můžou zobrazit také některé rozdíly v chování. Další informace naleznete v tématu Aktualizace aplikace na sql Server Native Client z MDAC.
SQL Server Native Client 9.0 dodáván s SQL Serverem 2005 (9.x). SQL Server Native Client 10.0 dodáván s SQL Serverem 2008 (10.0.x). SQL Server Native Client 10.5 dodáván s SQL Serverem 2008 R2 (10.50.x). SQL Server Native Client 11.0 dodáván s SQL Serverem 2012 (11.x) a SQL Serverem 2014 (12.x).
Změna chování nativního klienta SQL Serveru od verze SQL Server 2005 (9.x) | Popis |
---|---|
Panely OLE DB jsou určené pouze pro definované měřítko. | Při převodech, kdy se převedená data odesílají na server, sql Server Native Client (počínaje sql Serverem 2008 (10.0.x)) na konci nul v datech až do maximální délky hodnoty data a času. SQL Server Native Client 9.0 padded to 9 digits. |
Ověřte DBTYPE_DBTIMESTAMP pro ICommandWithParameter::SetParameterInfo. | SQL Server Native Client (počínaje SQL Serverem 2008 (10.0.x)) implementuje požadavek OLE DB pro bScale v ICommandWithParameter::SetParameterInfo, aby byla nastavena na přesnost desetinných sekund pro DBTYPE_DBTIMESTAMP. |
Uložená procedura sp_columns nyní vrátí "NE" místo "NE" pro sloupec IS_NULLABLE. | Počínaje sql Server Native Client 10.0 (SQL Server 2008 (10.0.x)), sp_columns uložená procedura nyní vrací "NE" místo "NE" pro sloupec IS_NULLABLE. |
SQLSetDescRec, SQLBindParameter a SQLBindCol teď provádějí kontrolu konzistence. | Před sql Server Native Client 10.0 nastavení SQL_DESC_DATA_PTR nezpůsobil kontrolu konzistence pro žádný typ popisovače v SQLSetDescRec, SQLBindParameter nebo SQLBindCol. |
SQLCopyDesc teď provede kontrolu konzistence popisovače. | Před sql Server Native Client 10.0 sqlCopyDesc nedělal kontrolu konzistence, když bylo pole SQL_DESC_DATA_PTR nastaveno na konkrétní záznam. |
SQLGetDescRec už neprovádí kontrolu konzistence popisovače. | Před sql Server Native Client 10.0 sqlGetDescRec provedl kontrolu konzistence popisovače při nastavení pole SQL_DESC_DATA_PTR. To není vyžadováno specifikací ODBC a v SQL Server Native Client 10.0 (SQL Server 2008 (10.0.x)) a novějších verzích, tato kontrola konzistence se už neprovádí. |
Pokud je datum mimo rozsah, vrátila se jiná chyba. | Pro typ datetime bude vráceno jiné číslo chyby nativního klienta SQL Serveru (počínaje SQL Serverem 2008 (10.0.x) pro datum mimo rozsah, než bylo vráceno v dřívějších verzích. Konkrétně, Sql Server Native Client 9.0 vrátil 22007 pro všechny hodnoty roku mimo rozsah v řetězcových převodech na datetimea SQL Server Native Client počínaje verzí 10.0 (SQL Server 2008 (10.10.) 0.x)) vrátí hodnotu 22008, pokud je datum v rozsahu podporovaném datetime2 mimo rozsah podporovaný datetime nebo smalldatetime. |
hodnota datetime zkrátí desetinné sekundy a nezaokrouhlí, pokud se zaokrouhlování změní den. | Před sql Server Native Client 10.0 chování klienta pro datetime hodnoty odeslané na server je zaokrouhlit na nejbližší 1/300th sekundy. Počínaje klientem SQL Server Native Client 10.0 tento scénář způsobí zkrácení desetinných sekund, pokud se zaokrouhlování změní den. |
Možné zkrácení sekund pro hodnotu data a času. | Aplikace vytvořená s SQL Serverem 2008 (10.0.x) Nativní klient (nebo novější), který se připojuje k serveru SQL Server 2005, zkrátí sekundy a zlomkové sekundy pro časovou část dat odesílaných na server, pokud vytvoříte vazbu na sloupec datetime s identifikátorem typu DBTYPE_DBTIMESTAMP (OLE DB) nebo SQL_TIMESTAMP (ODBC) a škálou 0. Například: Vstupní data: 1994-08-21 21:21:36.000 Vložená data: 1994-08-21 21:21:00.000 |
Převod dat OLE DB z DBTYPE_DBTIME na DBTYPE_DATE už nemůže způsobit změnu dne. | Před sql Server Native Client 10.0, pokud časová část DBTYPE_DATE byla do půl sekundy půlnoci, kód převodu OLE DB způsobil den změny. Počínaje sql Server Native Client 10.0, den se nezmění (zlomkové sekundy jsou zkráceny a nejsou zaokrouhleny). |
IBCPSession::BCColFmt změny převodu. | Počínaje sql Server Native Client 10.0, když použijete IBCPSession::BCOColFmt k převodu SQLDATETIME nebo SQLDATETIME na typ řetězce, je exportována desetinná hodnota. Například při převodu typu SQLDATETIME na typ SQLNVARCHARMAX, vrátily se dřívější verze nativního klienta SQL Serveru. 1989-02-01 00:00:00. SQL Server Native Client 10.0 a novější verze vrací 1989-02-01 00:00:00.0000000. |
Velikost odeslaných dat musí odpovídat délce zadané v SQL_LEN_DATA_AT_EXEC. | Při použití SQL_LEN_DATA_AT_EXEC musí velikost dat odpovídat délce zadané SQL_LEN_DATA_AT_EXEC. Můžete použít SQL_DATA_AT_EXEC, ale pro použití SQL_LEN_DATA_AT_EXEC existují potenciální výhody výkonu. |
Vlastní aplikace, které používají rozhraní BCP API, teď můžou zobrazit upozornění. | Rozhraní BCP API vygeneruje zprávu upozornění, pokud je délka dat větší než zadaná délka pole pro všechny typy. Toto upozornění bylo dříve uděleno pouze pro typy znaků, ale nebude vydáno pro všechny typy. |
Vložení prázdného řetězce do sql_variant vázaného jako typu data a času vygeneruje chybu. | V systému SQL Server Native Client 9.0 vložení prázdného řetězce do sql_variant vázaného jako typ data a času negenerovalo chybu. SQL Server Native Client 10.0 (a novější) správně generuje chybu v této situaci. |
Přísnější SQL_C_TYPE _TIMESTAMP a ověřování parametrů DBTYPE_DBTIMESTAMP. | Před SQL Serverem 2008 (10.0.x) Nativní klient hodnoty data a času byly zaokrouhleny tak, aby odpovídaly měřítku datetime a sloupce smalldatetime podle SQL Serveru. SQL Server 2008 (10.0.x) Nativní klient (a novější) použije přísnější ověřovací pravidla definovaná ve specifikaci jádra ODBC pro desetinné sekundy. Pokud hodnotu parametru nelze převést na typ SQL pomocí měřítka zadaného nebo předpokládaného klientskou vazbou bez zkrácení koncových číslic, vrátí se chyba. |
SQL Server může při spuštění triggeru vrátit jiné výsledky. | Změny zavedené v SYSTÉMU SQL Server 2008 (10.0.x) můžou způsobit, že aplikace bude mít různé výsledky vrácené příkazem, který způsobil spuštění triggeru při NOCOUNT OFF byl v platnosti. V takovém případě může vaše aplikace vygenerovat chybu. Chcete-li tuto chybu vyřešit, nastavte NOCOUNT ON v triggeru nebo volání SQLMoreResults přejít na další výsledek. |