2017-07-06 128 views
0

当我在下面的代码中输入最后一个连接时,出现一条错误消息,指出“将varchar值3转换为数据类型int时转换失败。 (味精245,级别16,状态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

你能请张贴的数据类型ad.id和pe.address? – Eli

+1

您需要共享那些“奇怪的字符”行... – fhossfel

+0

如果它是一个int值(不含“怪异字符”),您可以将pe.fdaddress强制转换为int。但是,如果fdaddress被假定为索引外键,那么该索引将不再工作(索引是针对原始varchar值的,而不是int)。你应该总是试着设计你的数据库以在你的表上拥有合适的主键和/或外键。 – RToyo

回答

0

我觉得您的记录propabaly在pe.fdaddress一个不是数字 避免这种情况你最好转换整数为char 像这样

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