Sql 获得';将数据类型varchar转换为数字时出错;即使在转换之后

Sql 获得';将数据类型varchar转换为数字时出错;即使在转换之后,sql,sql-server,Sql,Sql Server,我有一个简单的sql查询 select top 100 pickticket_number, date_allocated, l2.action from [JMNYC-AMTDB].[AMTPLUS].[dbo].PickTickets P (nolock) left join [A1Warehouse].[dbo].[RF_LOG2] (NOLOCK) l2 ON l2.PACKSLIP = p.PickTicket_Number 这似乎是一个

我有一个简单的sql查询

select top 100 
    pickticket_number,
    date_allocated,
    l2.action
from  
    [JMNYC-AMTDB].[AMTPLUS].[dbo].PickTickets P (nolock)
left join
    [A1Warehouse].[dbo].[RF_LOG2] (NOLOCK) l2 ON l2.PACKSLIP = p.PickTicket_Number
这似乎是一个简单的转换/铸造问题,但无论我尝试什么转换或铸造,我得到相同的错误

我已经尝试了以下所有方法

LEFT JOIN
    [A1Warehouse].[dbo].[RF_LOG2] (NOLOCK) l2 ON convert(numeric,l2.PACKSLIP) = p.PickTicket_Number

LEFT JOIN
    [A1Warehouse].[dbo].[RF_LOG2] (NOLOCK) l2 ON convert(numeric,l2.PACKSLIP) = convert(numeric, p.PickTicket_Number)

LEFT JOIN
    [A1Warehouse].[dbo].[RF_LOG2] (NOLOCK) l2 ON cast(l2.PACKSLIP as decimal(22,8)) = cast(p.pickticket_number as decimal(22,8)) 

然而,所有这些或铸造或转化的任何组合似乎都不起作用。有人知道我做错了什么吗

您显然有无效数据。您可以通过以下方式找到它:

select packslip
from [A1Warehouse].[dbo].[RF_LOG2]
where try_cast(l2.PACKSLIP as decimal(22,8)) is null and l2.PACKSLIP is not null;
对于查询,您可以使用
try\u cast()
来避免错误。但是,您应该看到数据中的实际问题是什么


而且,您的外键关系应该具有匹配类型并正确声明。

您显然有无效数据。您可以通过以下方式找到它:

select packslip
from [A1Warehouse].[dbo].[RF_LOG2]
where try_cast(l2.PACKSLIP as decimal(22,8)) is null and l2.PACKSLIP is not null;
对于查询,您可以使用
try\u cast()
来避免错误。但是,您应该看到数据中的实际问题是什么


而且,您的外键关系应该具有匹配类型并正确声明。

看起来您的数据无法转换为数字/十进制

强制转换为varchar

select top 100 
    pickticket_number,
    date_allocated,
    l2.action
from  
    [JMNYC-AMTDB].[AMTPLUS].[dbo].PickTickets P (nolock)
left join
    [A1Warehouse].[dbo].[RF_LOG2] (NOLOCK) l2 ON cast(l2.PACKSLIP as varchar) = cast(p.PickTicket_Number as varchar)
然后对每个表进行故障排除,查看该字段中有哪些非数字字符


使用
isnumeric

看起来您的数据无法转换为数字/十进制

强制转换为varchar

select top 100 
    pickticket_number,
    date_allocated,
    l2.action
from  
    [JMNYC-AMTDB].[AMTPLUS].[dbo].PickTickets P (nolock)
left join
    [A1Warehouse].[dbo].[RF_LOG2] (NOLOCK) l2 ON cast(l2.PACKSLIP as varchar) = cast(p.PickTicket_Number as varchar)
然后对每个表进行故障排除,查看该字段中有哪些非数字字符

使用
isnumeric