Problema durante l'inserimento di dati in un campo varchar usando una procedura memorizzata

StackOverflow https://stackoverflow.com/questions/801978

  •  03-07-2019
  •  | 
  •  

Domanda

Sto caricando alcuni dati da DB2 a SQL2005. La tabella contiene un campo di testo che è lungo 2000 caratteri in DB2 ma è impostato come varchar (2000) in SQL.

Quando eseguo il mio inserimento nel browser delle query, viene elaborato correttamente e i dati vengono copiati correttamente, tuttavia quando la stessa istruzione viene eseguita nella mia procedura memorizzata, i dati per questo campo vengono copiati in modo errato e vengono visualizzati come una serie di caratteri strani.

Il campo può occasionalmente contenere caratteri di controllo, tuttavia il problema si verifica anche quando non lo è.

Esiste un'impostazione che devo applicare alla mia procedura memorizzata per far funzionare correttamente l'inserto?

O devo usare un cast o convertire i dati per farlo apparire correttamente.

Grazie.

Aggiornamento: grazie per i tuoi suggerimenti. Ora sembra che il problema sia stato causato dal software utilizzato per creare il server collegato contenente il database DB2. Questo non può gestire un campo di 2000 caratteri quando viene eseguito tramite una procedura memorizzata, ma può essere eseguito in modo interattivo.

Alla fine ho risolto il problema collegando il campo in campi lunghi da 10.200 caratteri per il caricamento e poi li ho ricongiunti quando si trovavano nel database SQL.

È stato utile?

Soluzione 3

Questo problema è stato causato dal software di terze parti utilizzato per creare il server collegato al database DB2. Questo non può gestire un campo di 2000 caratteri quando viene eseguito tramite una procedura memorizzata, ma può essere eseguito in modo interattivo.

Alla fine ho risolto il problema collegando il campo in campi lunghi da 10.200 caratteri per il caricamento e poi li ho ricongiunti quando erano nel database SQL.

Altri suggerimenti

Sembra che i dati provenienti da db2 siano in un set di caratteri diverso. Dovresti assicurarti che non sia EBCDIC o qualcosa del genere.

Inoltre, prova a chiamare la procedura memorizzata da SQL Server Management Studio (browser delle query), per vedere se funziona affatto.

Potresti voler cambiare varchar (2000) in un nvarchars (2000) (nella procedura memorizzata e nella tabella - suppongo che esista come parametro). Ciò consentirebbe loro di contenere due caratteri byte. Dipenderà dalla configurazione DB2 ma potrebbe essere che sta esportando UTF-16 (o simile) anziché UTF-8.

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