2017-08-24 416 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,在這種情況下應該足夠了,但最佳實踐始終指定長度。

相關問題