Domanda

Purtroppo stiamo utilizzando Advantage Database Server Edizione della tortura Versione 8.1.Dopo aver terminato il mio progetto, ho sentito che il database è configurato per distinguere tra maiuscole e minuscole.Quindi ho cambiato la struttura della tabella, tutti i tipi di dati Char in CIChar, il che è un caso insensibile campo di carbone.Ma ottengo questo errore durante l'esecuzione del mio programma:

Advantage.Data.Provider.AdsException:

Errore 7200:Errore AQE:Stato = hy000;Errorenativo = 2214;Sistemi estesi] [Advantage SQL Engine] Coercizione non valida:Il risultato dell'espressione è un tipo di carattere ambiguo.

Ho scoperto che ISNULL(myciChar,'') sta causando questo problema, ma non capisco, PERCHÉ?Come potrei risolvere questo problema?Esistono altri problemi noti con il tipo di dati cichar?

Qualsiasi aiuto sarà apprezzato.Grazie.

[aggiornamento]

Ho trovato il motivo di questo errore.C'erano due punti da chiarire.

  1. Il database ha la versione 8.1, ma il data architect ha la versione 7.1 e in modalità locale utilizza il motore architect versione 7.1.Ciò significa che è un problema v7.1.
  2. Il secondo parametro nella funzione isnull è nelle regole di confronto predefinite con distinzione tra maiuscole e minuscole nella versione 7.1 mentre la mia colonna mytext è cichar e questo è il tipo di carattere ambiguo.Quindi, se qualcuno ha lo stesso problema, funzionerà nella versione 7.1 con la dichiarazione di collatazione:

funziona nella versione 7.1:

select myid, isnull(mytext, '-' COLLATE ads_default_ci) as mytext from mytable

errore nella v7.1:

select myid, isnull(mytext, '-') as mytext from mytable
È stato utile?

Soluzione

Probabilmente ho bisogno di vedere più della tua espressione per dirti perché stai ricevendo questo errore. Non ha molto a che fare con l'isnull quanto l'espressione in cui viene utilizzato IsNull. Il motore probabilmente ha riscontrato un confronto e non è riuscito a determinare automaticamente se si desidera che il confronto fosse sensibile al caso o meno. Vedere la documentazione che descrive la precedenza e la coercizione insensibili al caso.

Se non usato in un'espressione, potrebbe essere solo un bug (ho appena provato con 10.1 e ha funzionato), verifica che tu stia usando l'ultima versione di 8.1, che è 8.10.0.38

Altri suggerimenti

Non penso che la versione 7 supporti il ​​tipo di dati cichar, la versione 6 certamente no.Stavo usando la versione 6 e sono passato direttamente alla 8 e ho scoperto che tutto funzionava con il driver client della versione 6, finché non ho utilizzato il tipo di dati cichar e poi il gioco è finito per Advantage.Ho quindi dovuto aggiornare tutti i client alla stessa versione del server.È meglio mantenere tutte le versioni uguali.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top