Condividi tramite


Conversione della copia bulk da DB-Library a ODBC

Si applica a: SQL Server Database SQL di Azure Istanza gestita di SQL di Azure Azure Synapse Analytics Piattaforma di strumenti analitici (PDW)

La conversione di un programma di copia bulk della libreria di database in ODBC è semplice perché le funzioni di copia bulk supportate dal driver ODBC di SQL Server Native Client sono simili alle funzioni di copia bulk della libreria di database, con le eccezioni seguenti:

  • Nelle applicazioni DB-Library un puntatore a una struttura DBPROCESS viene passato come primo parametro delle funzioni di copia bulk. Nelle applicazioni ODBC il puntatore DBPROCESS viene sostituito da un handle di connessione ODBC.

  • Le applicazioni della libreria DB chiamano BCP_SETL prima di connettersi per abilitare le operazioni di copia bulk in un dbPROCESS. Le applicazioni ODBC chiamano invece SQLSetConnectAttr prima di connettersi per abilitare le operazioni bulk su un handle di connessione:

    SQLSetConnectAttr(hdbc, SQL_COPT_SS_BCP,  
        (void *)SQL_BCP_ON, SQL_IS_INTEGER);  
    
  • Il driver ODBC di SQL Server Native Client non supporta i gestori di messaggi e errori della libreria DB; è necessario chiamare SQLGetDiagRec per ottenere errori e messaggi generati dalle funzioni di copia bulk ODBC. Le versioni ODBC delle funzioni di copia bulk restituiscono i codici restituiti standard di copia bulk SUCCEED o FAILED, non codici restituiti di tipo ODBC, come SQL_SUCCESS o SQL_ERROR.

  • I valori specificati per il parametro varlen bcp_bindlibreria DB vengono interpretati in modo diverso rispetto al parametro ODBC bcp_bindcbData.

    Condizione indicata Valore varlen della libreria DB Valore cbData ODBC
    Valori Null forniti 0 -1 (SQL_NULL_DATA)
    Dati variabili forniti -1 -10 (SQL_VARLEN_DATA)
    Carattere di lunghezza zero o stringa binaria ND 0

    In DB-Library, un valore varlen pari a -1 indica che vengono forniti dati di lunghezza variabile, che in ODBC cbData viene interpretato per indicare che vengono forniti solo valori NULL. Modificare le specifiche varlen della libreria DB di -1 in SQL_VARLEN_DATA ed eventuali specifiche varlen da 0 a SQL_NULL_DATA.

  • La libreria DB bcp_colfmt file_collen e odbc bcp_colfmtcbUserData hanno lo stesso problema dei parametri bcp_bindvarlen e cbData indicati in precedenza. Modificare tutte le specifiche della libreria DB file_collen pari a -1 in SQL_VARLEN_DATA ed eventuali specifiche di file_collen da 0 a SQL_NULL_DATA.

  • Il parametro iValue della funzione ODBC bcp_control è un puntatore void. In DB-Library iValue era un numero intero. Eseguire il cast dei valori per ODBC iValue su void *.

  • L'opzione bcp_control BCPMAXERRS specifica il numero di singole righe che possono avere errori prima che un'operazione di copia bulk abbia esito negativo. Il valore predefinito per BCPMAXERRS è 0 (errore al primo errore) nella versione db-Library di bcp_control e 10 nella versione ODBC. Le applicazioni della libreria DB che dipendono dal valore predefinito 0 per terminare un'operazione di copia bulk devono essere modificate per chiamare il bcp_control ODBC per impostare BCPMAXERRS su 0.

  • La funzione ODBC bcp_control supporta le opzioni seguenti non supportate dalla versione della libreria di database di bcp_control:

    • BCPODBC

      Se impostato su TRUE, specifica che i valori datetime e smalldatetime salvati in formato carattere avranno il prefisso e il suffisso odbc della sequenza di escape timestamp. Si applica solo alle operazioni BCP_OUT.

      Con BCPODBC impostato su FALSE, viene restituito un valore datetime convertito in una stringa di caratteri come segue:

      1997-01-01 00:00:00.000  
      

      Con BCPODBC impostato su TRUE, viene restituito lo stesso valore datetime :

      {ts '1997-01-01 00:00:00.000' }  
      
    • BCPKEEPIDENTITY

      Quando è impostato su TRUE, specifica che le funzioni di copia bulk inseriscono i valori dei dati forniti per le colonne con vincoli di identità. Se questa impostazione non è disponibile, per le righe inserite vengono generati nuovi valori Identity.

    • BCPHINTS

      Specifica le varie ottimizzazioni della copia bulk. Questa opzione non può essere usata nella versione 6.5 o versioni precedenti di SQL Server.

    • BCPFILECP

      Specifica la tabella codici del file di copia bulk.

    • BCPUNICODEFILE

      Specifica che un file di copia bulk in modalità carattere è un file Unicode.

  • La funzione ODBC bcp_colfmt non supporta l'indicatore file_type di SQLCHAR perché è in conflitto con il typedef ODBC SQLCHAR. Usare INvece SQLCHARACTER per bcp_colfmt.

  • Nelle versioni ODBC delle funzioni di copia bulk, il formato per l'utilizzo dei valori datetime e smalldatetime nelle stringhe di caratteri è il formato ODBC aaaa-mm-gg hh:mm:ss.sss; i valori smalldatetime usano il formato ODBC aaaa-mm-gg hh:mm:ss.

    Le versioni della libreria DB delle funzioni di copia bulk accettano valori datetime e smalldatetime nelle stringhe di caratteri usando diversi formati:

    • Il formato predefinito è mmm gg aaa hh:mmxx dove xx è AM o PM.

    • stringhe di caratteri datetime e smalldatetime in qualsiasi formato supportato dalla funzione dbconvert della libreria DB.

    • Quando la casella Usa impostazioni internazionali è selezionata nella scheda Opzioni libreria db dell'utilità di rete client di SQL Server, le funzioni di copia bulk della libreria db accettano anche le date nel formato di data a livello di area definito per l'impostazione delle impostazioni locali del Registro di sistema del computer client.

    Le funzioni di copia bulk della libreria DB non accettano i formati datetime e smalldatetime ODBC.

    Se l'attributo dell'istruzione SQL_SOPT_SS_REGIONALIZE è impostato su SQL_RE_ON, le funzioni di copia bulk ODBC accettano il formato di data locale definito per le impostazioni locali del Registro di sistema del computer client.

  • Quando si generano valori money in formato carattere, le funzioni di copia bulk ODBC forniscono quattro cifre di precisione e nessun separatore di virgole; Le versioni della libreria DB forniscono solo due cifre di precisione e includono i separatori di virgole.

Vedi anche

Esecuzione di operazioni di copia bulk (ODBC)
Funzioni di copia bulk