2017-08-24 159 views
0

我试图连接两个表。将数据类型nvarchar转换为bigint时出错 - 当加入两种不同的数据类型时

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。

即使我没有施放任何东西,我也会得到相同的错误。

+0

这很完美。两列'DataType'都应该是相同的。你可能需要铸造或其他东西。 –

回答

0

投射连接。

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

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

二,转换中的selecton没有影响,所以需要转换两次。

也许你打算:

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

通常情况下,我会建议你使用try_convert()。然而,转换为字符串是非常安全的,所以你可以确信它会起作用。

+0

为什么255? bigint的最小值是19位数和一个负号,所以20应该足够长.... –

+0

@ZoharPeled。 。 。我只是使用'255'作为大多数字符串的合理长度。 –

0

SQL Server试图隐含地将nvarchar转换为bigint。 你需要转换的bigintnvarchar明确,以避免例外,如果你的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,在这种情况下应该足够了,但最佳实践始终指定长度。

相关问题