2017-03-02 4 views
1

J'ai un problème avec la jointure sur la colonne varchar.SQL JOIN sur varchar avec des caractères spéciaux et des zéros en tête

Je vais mettre à jour les données SQL à partir de données Excel par code de produit, mais Twr_Kod est varchar et il est le seul moyen de se joindre à des données Excel.

Il y a aussi un problème avec convertir en varchar lorsqu'il y a des zéros en tête.

select CDN.Towary.Twr_Kod, excel.Twr_Kod 
from CDN.Towary 
left join openrowset('Microsoft.ACE.OLEDB.12.0', 
        Excel 8.0;Database=C:\excel\towary.xlsx;', 
        'select * from [Arkusz1$]') excel 
        on cast(CDN.Towary.Twr_Kod as varchar) = cast(excel.Twr_Kod as varchar) 

enter image description here

je sais que ce n'est pas une bonne solution pour se joindre à la colonne varchar, mais il est nécessaire pour aider s'il vous plaît pourquoi fonte ne convertit pas.

+0

'mysql' ou' sql-server' veuillez marquer votre question correctement. – Tanner

+0

Désolé, changé. Seul sql-server – AdamWoxTron

+0

donnez s'il vous plaît des exemples de valeurs avec des zéros en tête et mettez en évidence le problème, vous n'avez pas montré cela dans vos données d'exemple – Tanner

Répondre

0

Le problème vient du fait que votre colonne Excel contient des types de données mixtes. Lors de l'importation de fichiers csv ou de fichiers Excel avec des colonnes de types de données mixtes, les types non dominants seront remplacés par null. (L'utilisation Oledb ou Ace.Oledb)

Solution

Ajouter IMEX=1; à votre connectionstring OpenRowset et ajouter une première ligne fictive texte containning valeurs

Suivez ma réponse à Import error using Openrowset pour obtenir plus de détails

+0

Il est tellement confus mais de travail. Merci beaucoup. Tu m'as sauvé la vie: D – AdamWoxTron