Sql 获得';将数据类型varchar转换为数字时出错;即使在转换之后
我有一个简单的sql查询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 这似乎是一个
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