我有一个简单的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))
但是,这些都不起作用,或者强制转换或转换的任何组合似乎都不起作用。有人知道我在做什么错吗?
答案 0 :(得分:1)
您显然有无效的数据。您可以通过执行以下操作找到它:
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_cast()
来避免该错误。但是,您应该查看数据中的实际问题是什么。
而且,您的外键关系应具有匹配的类型并正确声明。
答案 1 :(得分:1)
您似乎无法将数据转换为数字/十进制
广播/转换为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