2017-09-22 19 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 

それが引ける戻って、このエラーになるのよ:nvarchar値 '3255+'をデータ型intに変換するときに変換に失敗しました。

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

私は私が間違っている可能性がありますどのような考えを持っていないSQLには本当に新しいです。ご協力いただきありがとうございます。

ボブ

+0

つ(KnotenNummer、Nrと、ZugNr、LineRouteName)は、 "3255+" ではない整数を有しています。あなたはすべての面をvarcharとしてキャストする必要があります。 –

答えて

1

比較に関係するすべての列のデータ型を見てください。比較は、あなたのJOINSのON節とWHERE節にあります。

文字列(varchar)と数値(整数またはその他の数値型)を比較する場合は、数値型の列を文字列(varchar)としてCASTする必要があります。それ以外の場合、SQL Serverは暗黙的に文字列を数値としてキャストしようとしますが、そうでない場合は、表示されているエラーを発生させます。 d.ZugNrが数値である場合

WHERE Zugvariante = '216' 

LineRouteNameは次のとおりです。たとえば、あなたがZugvarianteがvarchar型であることを発見した場合

そう、あなたは次のように単一引用符でそれを置くことによって216文字列を作成する必要があります文字列、そしてあなたは、文字列としてそれらの両方を比較する必要があります:

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

この列に含まれるデータには、整数に変換できない値が含まれています。

プラス値で変換が失敗しています。文字列をクリーンアップするために+を削除してください。 (ヒント:置換が必要です)

0

私は問題がINT列とNVARCHAR列の間にある結合、後者は「3255+」を含むの一つである疑いがあります整数に変換することはできません。

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

とタイプが一致することを確認してください:

は、私はあなたの列の種類を確認することを示唆しています。

0

WHERE句に含まれる列の一部は、整数フィールドではありません。 問題を解決するには、文字列として文字列を検索します。 例:これらの列の

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

またはINTに変換することができます – Sami

関連する問題