2017-09-22 12 views
0
/****** Script for SelectTopNRows command from SSMS ******/ 
SELECT * 


FROM Zuege as a 

INNER JOIN [ResultateProzessModellZug_PF3_PF3_SimFV_2015_mNT_mSKT_L91_mZuschlaege_SKT] as b 

ON a.ZuglaufID = b.Zuglaufid 

LEFT JOIN [SysPue].[dbo].[VISUM_I_Knoten_Netz2015] as c 
    on [KnotenNummer] = Nr 

LEFT JOIN [SysPue].[dbo].[LINIE_I_Richtung_Fahrplan2015] as d 
    on d.ZugNr = LineRouteName 

WHERE Zugvariante = 216 
and ModellzugID in (1,2,3,4,5,6,7,8,9,10) 
and Qualitaetszug = 1 
and Inland = 1 

Il est Givin être de retour cette erreur:La conversion a échoué lors de la conversion de la valeur nvarchar '3255+' en type de données int.

Msg 245, Level 16, State 1, Line 2 
Conversion failed when converting the nvarchar value '3255+' to data type int. 

Je suis vraiment nouveau à SQL je n'ai pas une idée de ce qui pourrait être erroné. Merci de votre aide.

Bob

+0

une de ces colonnes (KnotenNummer, Nr, ZugNr, LineRouteName) a "3255+" qui ne entier. Vous devez lancer tous les côtés comme varchar. –

Répondre

1

Examinez les types de données de chaque colonne impliquée dans une comparaison. Les comparaisons se trouvent dans les clauses ON de vos JOINS et dans la clause WHERE.

Chaque fois que vous comparez une chaîne (varchar) à un nombre (entier ou autre type numérique), vous devez CAST la colonne de type numérique en tant que chaîne (varchar). Sinon, SQL Server essaiera implicitement de CAST la chaîne sous la forme d'un nombre, et si ce n'est pas le cas, cela augmentera l'erreur que vous voyez.

Ainsi, si par exemple vous trouvez que Zugvariante est un varchar, alors vous devez faire 216 une chaîne en le plaçant dans des guillemets simples comme ceci:

WHERE Zugvariante = '216' 

Si d.ZugNr est un nombre et LineRouteName est un chaîne, alors vous devez les comparer à la fois comme des chaînes:

CAST(d.ZugNr AS varchar(31)) = LineRouteName 
-1

Les données contenues dans cette colonne contient des valeurs qui ne peuvent pas être converties en un nombre entier.

La valeur Plus + entraîne l'échec de la conversion. Supprimez le + en utilisant du code pour nettoyer la chaîne. (Indice: Remplacer vient à l'esprit.)

0

Je soupçonne que le problème est avec l'une des jointures étant entre une colonne INT et une colonne NVARCHAR, et celle-ci contient « 3255+ » Cela ne peut pas être un convertisseur en nombre entier.

Je vous suggère de vérifier les types de colonnes de:

a.ZuglaufID and b.Zuglaufid 
[KnotenNummer] and Nr 
d.ZugNr and LineRouteName 

et assurez-vous que le match de types.

0

Certaines des colonnes contenues dans la clause WHERE ne sont pas un champ entier. Pour résoudre le problème, recherchez la chaîne sous forme de chaîne. Exemple:

SELECT * 
FROM Zuege as a 
     INNER JOIN [ResultateProzessModellZug_PF3_PF3_SimFV_2015_mNT_mSKT_L91_mZuschlaege_SKT] AS b ON a.ZuglaufID = b.Zuglaufid 
     LEFT JOIN [SysPue].[dbo].[VISUM_I_Knoten_Netz2015]         AS c ON [KnotenNummer] = Nr 
     LEFT JOIN [SysPue].[dbo].[LINIE_I_Richtung_Fahrplan2015]        AS d ON d.ZugNr  = LineRouteName 
WHERE Zugvariante = 216 -- (IF [Zugvariante] IS VARCHAR) 
    AND ModellzugID IN ('1','2','3','4','5','6','7','8','9','10') -- (IF [ModellzugID] IS VARCHAR) 
    AND Qualitaetszug = '1' -- (IF [Qualitaetszug] IS VARCHAR) 
    AND Inland  = '1' -- (IF [Inland] IS VARCHAR) 
+0

Ou vous pouvez le convertir en INT – Sami