将数据类型nvarchar转换为bigint时出错 - 加入两种不同的数据类型时

时间:2017-08-24 15:27:47

标签: sql sql-server

我正在尝试加入两个表格。

Table1.Column1,其中第1列是BIGInt。 上 Table2.Column2,其中第2列是Nvarchar。

这是我正在运行的

Select HspId, CMSid, Cast(CMSId as nvarchar)
From Q2IMSSiteHistory2015old
inner Join HSP on HSP.CMSid = Q2IMSSiteHistory2015old.POS

我收到以下错误:将数据类型nvarchar转换为bigint时出错。

即使我没有投出任何东西,我也会得到同样的错误。

3 个答案:

答案 0 :(得分:0)

首先,在SQL Server中始终使用varchar的长度。

其次,select中的转换对on没有影响,因此您需要转换两次。

也许你打算:

Select HspId, CMSid, Cast(CMSId as nvarchar(255))
From Q2IMSSiteHistory2015old inner Join
     HSP
     on Cast(HSP.CMSId as nvarchar(255)) = Q2IMSSiteHistory2015old.POS;

通常,我建议您使用try_convert()。但是,转换为字符串非常安全,因此您可以确信它可以正常工作。

答案 1 :(得分:0)

SQL Server尝试将nvarchar隐式转换为bigint。 如果您的bigint列包含无法转换为nvarchar的值,则您需要明确地将nvarchar转换为bigint以避免例外:

Select HspId, CMSid, Cast(CMSId as nvarchar(20))
From Q2IMSSiteHistory2015old
inner Join HSP on Cast(HSP.CMSid as nvarchar(20)) = Q2IMSSiteHistory2015old.POS

此外,当您转换为任何字符串值(char,varchar,nchar或nvarchar)时,应始终指定字符串的最大长度。 SQL Server有default length of 30,在这种情况下应该足够了,但是最好的做法总是指定长度。

答案 2 :(得分:0)

施放联接。

B