SQL 我可以在另一个 table 中将一个整数连接到一个非整数吗?

SQL Can I join an Integer to a non integer in another table?

大家好,我有一个客户,他们给了我以下 SQL 代码..

select top 10 a.Login as Agent_Name, CallDateTime, h.PhoneNum as Client_DDI, ConnectTime, BridgeTime, CRC, *

from history h 
join Agent a on h.AgentID = a.AgentID
join contact c on h.DialID = c.trans_dialid

where h.PhoneNum = '01619740881'


order by h.CallDateTime desc

它失败了,因为 h.dialid 是一个 none 整数,但仍然是一个数字,但 c.trans_dialid 是一个标准整数,有没有办法基本上将 ' ' 放在 [=19 周围=] 在它加入之前?

已更新并添加了错误。 消息 248,级别 16,状态 1,第 11 行 varchar 值“-8956468456”的转换溢出了一个 int 列。

您可以 join 不同类型的列。毕竟,你得到的错误是 运行-time 错误而不是 compile-time 错误,所以语法是允许。这不是个好主意,但我会解决的。

你的问题是转换失败。

在 SQL Server 2012+ 中,您可以使用 try_convert():

处理此问题
on try_convert(int, h.dialid) = c.trans_dialid

如果值应该是没有前导零的整数,那么显式转换为字符串是一个很好的解决方案:

on cast(h.dialid as varchar(255)) = c.trans_dialid

但实际上,您应该修复数据结构。用于联接的列应属于同一类型。出于性能原因,这非常非常重要。通过使用不同的类型,您可以防止优化器使用特定的优化。

同样重要的是,当一个 table 引用另一个时,您应该具有明确的外键关系。这种关系要求两个键具有相同的类型。所以,正确设置你的数据库,你不会有这个问题。