将 nvarchar 值“3255+”转换为数据类型 int 时转换失败。
Conversion failed when converting the nvarchar value '3255+' to data type int.
/****** 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
返回此错误:
Msg 245, Level 16, State 1, Line 2
Conversion failed when converting the nvarchar value '3255+' to data type int.
我是 SQL 的新手,我不知道哪里出了问题。感谢您的帮助。
鲍勃
该列中包含的数据包含无法转换为整数的值。
Plus + 值导致转换失败。使用一些代码删除 + 以清理字符串。 (提示:想到替换。)
查看比较中涉及的每一列的数据类型。在 JOINS 的 ON
子句和 WHERE
子句中可以找到比较。
任何时候将字符串 (varchar) 与数字(整数或其他数字类型)进行比较时,都需要将数字类型的列转换为字符串 (varchar)。否则 SQL 服务器将尝试将字符串隐式转换为数字,如果不能,它将引发您看到的错误。
因此,例如,如果您发现 Zugvariante
是一个 varchar,那么您需要通过将 216
放在单引号中来使 216
成为一个字符串,如下所示:
WHERE Zugvariante = '216'
如果d.ZugNr
是一个数字而LineRouteName
是一个字符串,那么您需要将它们都作为字符串进行比较:
CAST(d.ZugNr AS varchar(31)) = LineRouteName
我怀疑问题出在 INT 列和 NVARCHAR 列之间的 JOIN 之一,后者包含无法转换为整数的“3255+”。
我建议您检查以下列类型:
a.ZuglaufID and b.Zuglaufid
[KnotenNummer] and Nr
d.ZugNr and LineRouteName
并确保类型匹配。
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)
/****** 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
返回此错误:
Msg 245, Level 16, State 1, Line 2
Conversion failed when converting the nvarchar value '3255+' to data type int.
我是 SQL 的新手,我不知道哪里出了问题。感谢您的帮助。
鲍勃
该列中包含的数据包含无法转换为整数的值。
Plus + 值导致转换失败。使用一些代码删除 + 以清理字符串。 (提示:想到替换。)
查看比较中涉及的每一列的数据类型。在 JOINS 的 ON
子句和 WHERE
子句中可以找到比较。
任何时候将字符串 (varchar) 与数字(整数或其他数字类型)进行比较时,都需要将数字类型的列转换为字符串 (varchar)。否则 SQL 服务器将尝试将字符串隐式转换为数字,如果不能,它将引发您看到的错误。
因此,例如,如果您发现 Zugvariante
是一个 varchar,那么您需要通过将 216
放在单引号中来使 216
成为一个字符串,如下所示:
WHERE Zugvariante = '216'
如果d.ZugNr
是一个数字而LineRouteName
是一个字符串,那么您需要将它们都作为字符串进行比较:
CAST(d.ZugNr AS varchar(31)) = LineRouteName
我怀疑问题出在 INT 列和 NVARCHAR 列之间的 JOIN 之一,后者包含无法转换为整数的“3255+”。
我建议您检查以下列类型:
a.ZuglaufID and b.Zuglaufid
[KnotenNummer] and Nr
d.ZugNr and LineRouteName
并确保类型匹配。
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)