SQL我可以将Integer加入另一个表中的非整数吗?

时间:2015-10-07 11:41:58

标签: sql sql-server integer

大家好,我有一个客户端,他们给了我以下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是一个非整数但仍然是一个数字,但c.trans_dialid是一个标准整数,有没有办法在它加入之前基本上放置'h.didid?

已更新并添加了错误。 Msg 248,Level 16,State 1,Line 11 varchar值'-8956468456'的转换溢出了一个int列。

1 个答案:

答案 0 :(得分:4)

您可以join个不同类型的列。毕竟,您遇到的错误是运行时错误,而不是编译时错误,因此允许使用语法。这不是一个好主意,但我会做到这一点。

您的问题是转换失败。

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

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

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

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

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

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