【问题标题】:Converting Varchar 3 to int将 Varchar 3 转换为 int
【发布时间】:2017-12-11 01:04:53
【问题描述】:

在下面的代码中输入最后一个联接时,我收到一条错误消息,指出“将 varchar 值 '3' 转换为数据类型 int 时转换失败。” (MSG 245,Level 16,State 1,Line 1)有人可以帮我解决这个问题吗?在一个表中,我尝试与另一个表中的另一个数字连接的数字前面确实有奇怪的字符。

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

【问题讨论】:

  • 能否请您发布 ad.id 和 pe.address 的数据类型?
  • 你需要分享那些“奇怪的字符”行...
  • 您可以将 pe.fdaddress 转换为 int,如果它是一个 int 值(没有“奇怪的字符”)。但是,如果 fdaddress 应该充当索引外键,则该索引将不再起作用(该索引用于原始 varchar 值,而不是 int)。您应始终尝试将数据库设计为在表上具有适当的主键和/或外键。
  • @Eli 如何识别数据类型?我也在使用链接服务器。
  • 您是否有权访问他们所在的服务器?该远程服务器上的 RDBMS 类型是什么?

标签: sql sql-server type-conversion


【解决方案1】:

我认为您在 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

【讨论】:

    猜你喜欢
    • 2013-02-28
    • 1970-01-01
    • 2013-11-27
    • 2013-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多