2017-08-24 13 views
0

2つのテーブルを結合しようとしています。データ型nvarcharをbigintに変換する際にエラーが発生しました.-異なる2種類のデータ型を結合するとき

Table1.Column1ここで、列1はBIGIntです。 On Table2.Column2ここで、列2はNvarcharです。エラーがBIGINTにデータ型はnvarcharを変換する:ここで

は私が次のエラーを取得しています

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

を実行しているものです。

何もキャストしない場合でも、同じエラーが発生します。

+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の長さを使用してください。

第2に、selectに変換すると、onには影響しません。したがって、2回変換する必要があります。

おそらく、あなたが意図:

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に変換しようとします。

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列がbigintに変換できない値が含まれている場合は、例外を回避するために、明示的にnvarcharbigintを変換する必要があり またはnvarchar)は、常に文字列の最大長を指定する必要があります。 SQL Serverにはdefault length of 30があります。この場合は十分ですが、ベストプラクティスでは常にlengthを指定してください。

関連する問題