2017-07-06 4 views
0

下のコードで最後に結合を入力すると、「varchar値 '3'をデータ型intに変換するときに変換に失敗しました」というエラーメッセージが表示されます。 (MSG 245、Level 16、State 1、Line 1)誰かがこれで私を助けてくれますか? 1つのテーブルには、他のテーブルの他の番号と結合しようとしている番号の前に奇妙な文字があります。Varchar 3をintに変換する

SELECT ca.fdorgunit AS Facility 
, pt.fdmedrecnum AS Account 
, ca.fddos AS DOS 
, ad.fdaddr1 AS [Address] 
, pe.fdssn AS SSN 
FROM OPENQUERY (VISION, 'SELECT * FROM ci.tbcase') AS ca 
LEFT JOIN OPENQUERY (VISION, 'SELECT * FROM de.tbpatient') AS pt 
ON pt.id = ca.fdpatient 
LEFT JOIN OPENQUERY (VISION, 'SELECT * FROM de.tbperson') AS pe 
ON pt.fdperson = pe.fdid 
LEFT JOIN OPENQUERY (VISION, 'SELECT * FROM de.tbaddress') AS ad 
ON ad.id = pe.fdaddress 
WHERE ca.fdcasestatus = 'Performed' 
GROUP BY ca.fdorgunit, ca.fddos, pt.fdmedrecnum, pe.fdssn, ad.fdaddr1 
+0

よう 何かをcharに整数に変換propabaly pe.fdaddressであなたのレコードの1つは、これを避けるために を数値ではないと思いますad.idとpe.address? – Eli

+1

これらの「奇妙な文字」行を共有する必要があります。 – fhossfel

+0

pe.fdaddressをint値(「奇妙な文字」がない)にすると、intにキャストできます。ただし、fdaddressがインデックスされた外部キーとして動作すると、そのインデックスは機能しなくなります(インデックスはintではなく元のvarchar値用です)。テーブルに適切なプライマリおよび/または外部キーを持つようにデータベースを設計するよう常に試みるべきです。 – RToyo

答えて

0

は、私はあなたがより良いあなたがのためのデータ型を投稿してくださいすることができ、この

SELECT ca.fdorgunit AS Facility 
, pt.fdmedrecnum AS Account 
, ca.fddos AS DOS 
, ad.fdaddr1 AS [Address] 
, pe.fdssn AS SSN 
FROM OPENQUERY (VISION, 'SELECT * FROM ci.tbcase') AS ca 
LEFT JOIN OPENQUERY (VISION, 'SELECT * FROM de.tbpatient') AS pt 
ON pt.id = ca.fdpatient 
LEFT JOIN OPENQUERY (VISION, 'SELECT * FROM de.tbperson') AS pe 
ON pt.fdperson = pe.fdid 
LEFT JOIN OPENQUERY (VISION, 'SELECT * FROM de.tbaddress') AS ad 
ON CAST(ad.id AS varchar(10)) = CAST(pe.fdaddress AS varchar(10)) 
WHERE ca.fdcasestatus = 'Performed' 
GROUP BY ca.fdorgunit, ca.fddos, pt.fdmedrecnum, pe.fdssn, ad.fdaddr1 
関連する問題