Uppdatera ett program från den interna SQL Server 2005-klienten
gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Viktig
SQL Server Native Client (SNAC) levereras inte med:
- SQL Server 2022 (16.x) och senare versioner
- SQL Server Management Studio 19 och senare versioner
SQL Server Native Client (SQLNCLI eller SQLNCLI11) och den äldre Microsoft OLE DB-providern för SQL Server (SQLOLEDB) rekommenderas inte för ny programutveckling.
Använd någon av följande faktorer för nya projekt:
För SQLNCLI som levereras som en komponent i SQL Server Database Engine (version 2012 till och med 2019), se det här Support Lifecycle exception.
I det här avsnittet beskrivs de icke-bakåtkompatibla ändringarna i SQL Server Native Client sedan SQL Server Native Client i SQL Server 2005 (9.x).
När du uppgraderar från Microsoft Data Access Components (MDAC) till SQL Server Native Client kan du också se vissa beteendeskillnader. Mer information finns i Uppdatera ett program till den interna SQL Server-klienten från MDAC.
SQL Server Native Client 9.0 levereras med SQL Server 2005 (9.x). SQL Server Native Client 10.0 levereras med SQL Server 2008 (10.0.x). SQL Server Native Client 10.5 levereras med SQL Server 2008 R2 (10.50.x). SQL Server Native Client 11.0 levereras med SQL Server 2012 (11.x) och SQL Server 2014 (12.x).
Ändrat beteende i den interna SQL Server-klienten sedan SQL Server 2005 (9.x) | Beskrivning |
---|---|
OLE DB-kuddar endast till den definierade skalan. | För konverteringar där konverterade data skickas till servern följer SQL Server Native Client (från och med SQL Server 2008 (10.0.x)) nollor i data upp till den maximala längden på datetime- värden. SQL Server Native Client 9.0 med 9 siffror. |
Verifiera DBTYPE_DBTIMESTAMP för ICommandWithParameter::SetParameterInfo. | SQL Server Native Client (från och med SQL Server 2008 (10.0.x)) implementerar OLE DB-kravet för bScale i ICommandWithParameter::SetParameterInfo som ska anges till bråkdelssekundernas precision för DBTYPE_DBTIMESTAMP. |
Den sp_columns lagrade proceduren returnerar nu "NEJ" i stället för "NO" för kolumnen IS_NULLABLE. | Från och med SQL Server Native Client 10.0 (SQL Server 2008 (10.0.x)) returnerar sp_columns lagrad procedur nu "NO" i stället för "NO" för en IS_NULLABLE kolumn. |
SQLSetDescRec, SQLBindParameter och SQLBindCol utför nu konsekvenskontroll. | Före SQL Server Native Client 10.0 orsakade inställningen SQL_DESC_DATA_PTR inte någon konsekvenskontroll för någon deskriptortyp i SQLSetDescRec, SQLBindParameter eller SQLBindCol. |
SQLCopyDesc utför nu deskriptorkonsekvenskontroll. | Innan SQL Server Native Client 10.0 gjorde SQLCopyDesc ingen konsekvenskontroll när fältet SQL_DESC_DATA_PTR angavs för en viss post. |
SQLGetDescRec gör inte längre en deskriptorkonsekvenskontroll. | Innan SQL Server Native Client 10.0 utförde SQLGetDescRec en deskriptorkonsekvenskontroll när fältet SQL_DESC_DATA_PTR angavs. Detta krävdes inte av ODBC-specifikationen och i SQL Server Native Client 10.0 (SQL Server 2008 (10.0.x)) och senare versioner utförs inte längre den här konsekvenskontrollen. |
Ett annat fel returnerades när datumet ligger inom intervallet. | För datetime- typ returneras ett annat felnummer av SQL Server Native Client (från och med SQL Server 2008 (10.0.x)) för ett inaktuellt datum än vad som returnerades i tidigare versioner. Mer specifikt SQL Server Native Client 9.0 returnerade 22007 för alla värden för år efter intervall i strängkonverteringar till datetimeoch SQL Server Native Client som börjar med version 10.0 (SQL Server 2008 (10 .0.x)) returnerar 22008 när datumet ligger inom det intervall som stöds av datetime2 men utanför intervallet som stöds av datetime eller smalldatetime. |
datetime-värdet trunkerar bråksekunder och inte avrundas om avrundningen ändrar dagen. | Före SQL Server Native Client 10.0 är klientbeteendet för datetime värden som skickas till servern att avrunda dem till närmaste 1/300:e i en sekund. Från och med SQL Server Native Client 10.0 orsakar det här scenariot en trunkering av bråksekunder om avrundningen ändras dagen. |
Möjlig trunkering av sekunder för datetime- värde. | Ett program som skapats med SQL Server 2008 (10.0.x) intern klient (eller senare) som ansluter till en SQL Server 2005-server trunkerar sekunder och bråk sekunder för tidsdelen av data som skickas till servern om du binder till en datetime-kolumn med en typidentifierare för DBTYPE_DBTIMESTAMP (OLE DB) eller SQL_TIMESTAMP (ODBC) och en skala på 0. Till exempel: Indata: 1994-08-21 21:21:36.000 Infogade data: 1994-08-21 21:21:00.000 |
OLE DB-datakonvertering från DBTYPE_DBTIME till DBTYPE_DATE kan inte längre leda till att dagen ändras. | Om en del av en DBTYPE_DATE var inom en halv sekund efter midnatt, orsakade OLE DB-konverteringskoden att dagen ändrades innan SQL Server Native Client 10.0. Från och med SQL Server Native Client 10.0 ändras inte dagen (bråk sekunder trunkeras och avrundas inte). |
IBCPSession::BCColFmt-konverteringsändringar. | Från och med SQL Server Native Client 10.0 exporteras ett bråkvärde när du använder IBCPSession::BCOColFmt för att konvertera SQLDATETIME eller SQLDATETIME till en strängtyp. När du till exempel konverterar typen SQLDATETIME till att skriva SQLNVARCHARMAX returnerades tidigare versioner av den interna SQL Server-klienten 1989-02-01 00:00:00. SQL Server Native Client 10.0 och senare versioner returnerar 1989-02-01 00:00:00.00000000. |
Storleken på data som skickas måste matcha den längd som anges i SQL_LEN_DATA_AT_EXEC. | När du använder SQL_LEN_DATA_AT_EXEC måste datastorleken matcha den längd som du angav med SQL_LEN_DATA_AT_EXEC. Du kan använda SQL_DATA_AT_EXEC men det finns potentiella prestandafördelar med att använda SQL_LEN_DATA_AT_EXEC. |
Anpassade program som använder BCP-API:et kan nu se en varning. | BCP-API:et genererar ett varningsmeddelande om datalängden är större än den angivna längden för ett fält för alla typer. Tidigare gavs den här varningen endast för teckentyper, men den utfärdas inte för alla typer. |
Om du infogar en tom sträng i en sql_variant som är bunden som en datum-/tidstyp genereras ett fel. | I SQL Server Native Client 9.0 genererade inte infogning av en tom sträng i en sql_variant bunden som en datum/tid-typ något fel. SQL Server Native Client 10.0 (och senare) genererar korrekt ett fel i den här situationen. |
Striktare SQL_C_TYPE _TIMESTAMP och DBTYPE_DBTIMESTAMP parameterverifiering. | Före DEN interna SQL Server 2008-klienten (10.0.x) avrundades datetime- värden för att passa skalan för datetime- och smalldatetime- kolumner av SQL Server. SQL Server 2008 (10.0.x) Native Client (och senare) tillämpar de striktare verifieringsregler som definieras i ODBC-kärnspecifikationen för bråksekunder. Om ett parametervärde inte kan konverteras till SQL-typen med hjälp av den skala som anges eller underförstås av klientbindningen utan trunkering av avslutande siffror returneras ett fel. |
SQL Server kan returnera olika resultat när en utlösare körs. | Ändringar som infördes i SQL Server 2008 (10.0.x) kan leda till att ett program får olika resultat returnerade från en instruktion som gjorde att en utlösare kördes när NOCOUNT OFF- var i kraft. I den här situationen kan ditt program generera ett fel. Lös det här felet genom att ange NOCOUNT ON i utlösaren eller anropa SQLMoreResults för att gå vidare till nästa resultat. |