跨数据库加入整理问题

问题描述 投票:0回答:1

跨数据库的此联接存在问题。当我单独运行每个部分(在UNION之前/之后)时它们运行得很好。但是,一旦联盟到位,我就会遇到错误。

无法解决UNION操作中“Latin1_General_BIN”和“SQL_Latin1_General_CP1_CI_AS”之间的排序规则冲突。 >

当我尝试将此问题添加到Select语句的特定区域(来自InspectionSpecification表的列)时,然后得到一个单独的错误。

将数据类型varchar转换为数字时出错。 >

我已经尝试通过将字段CAST到INT来克服这一点无济于事...任何帮助将不胜感激。

Select  WJAL.Job
,StockCode
,StockDescription
,Complete
,WJAL.Operation
,IExpUnitRunTim
,ParentQtyPlanEnt
,OperCompleted
,QtyCompleted
,QtyScrapped
,WorkCentre
,JobStartDate
,ActualFinishDate
,LEFT(RIGHT(StockDescription, CASE WHEN 
                                LEN(StockDescription) - CHARINDEX(',', 
StockDescription) - 1 < 0 THEN 0 ELSE LEN(StockDescription) - CHARINDEX(',', 
StockDescription) - 1 END), CHARINDEX(' ', RIGHT(StockDescription, CASE WHEN 

LEN(StockDescription) - CHARINDEX(',', StockDescription) - 1 < 0 THEN 1 ELSE 
LEN(StockDescription) - CHARINDEX(',', StockDescription) - 1 END))) as 
'Knife Model'
,PrevFinishDate
,PrevOperation
,PrevWorkCentre
,InspectionSpecification_No
,InspectionSpecification_type
,Status
,CASE WHEN LAG(WJAL.OperCompleted) OVER (PARTITION BY WJAL.Job Order By 
WJAL.Operation) IS NULL THEN 'Y' ELSE LAG(WJAL.OperCompleted) OVER 
(PARTITION BY WJAL.Job Order By WJAL.Operation) END as PrevCompleted

From (Select Job
            ,Operation
            ,IExpUnitRunTim
            ,ParentQtyPlanEnt
            ,OperCompleted
            ,QtyCompleted
            ,QtyScrapped
            ,WorkCentre
            ,ActualFinishDate
            ,LAG(ActualFinishDate) OVER (PARTITION BY Job Order By 
Operation) as PrevFinishDate
            ,LAG(Operation) OVER (PARTITION BY Job Order By Operation) as 
PrevOperation
            ,LAG(WorkCentre) OVER (PARTITION BY Job Order By Operation) as 
PrevWorkCentre
        From CompanyH.dbo.WipJobAllLab) WJAL
Join CompanyH.dbo.WipMaster t2
On WJAL.Job = t2.Job
Join [uniPoint_CompanyH].[dbo].[PT_InspectionSpecification] t3
On Case
WHEN t2.Warehouse = 'RD' and StockCode = t3.Part COLLATE 
Latin1_General_BIN and t3.InspectionSpecification_type = 'First 
Article' THEN 1
WHEN t2.Warehouse <> 'RD' and StockCode = t3.Part COLLATE 
Latin1_General_BIN and t3.InspectionSpecification_type = 'In 
Process'  THEN 1
ELSE 0
END = 1
WHERE WorkCentre = 'INSPCT' and OperCompleted = 'N' and Complete = 'N' and 
t3.Status <> 'Obsolete'
UNION
Select  WJAL2.Job
,StockCode
,StockDescription
,Complete
,WJAL2.Operation
,IExpUnitRunTim
,ParentQtyPlanEnt
,OperCompleted
,QtyCompleted
,QtyScrapped
,WorkCentre
,JobStartDate
,ActualFinishDate
,LEFT(RIGHT(StockDescription, CASE WHEN 
                                LEN(StockDescription) - CHARINDEX(',', 
StockDescription) - 1 < 0 THEN 0 ELSE LEN(StockDescription) - CHARINDEX(',', 
StockDescription) - 1 END), CHARINDEX(' ', RIGHT(StockDescription, CASE WHEN 

LEN(StockDescription) - CHARINDEX(',', StockDescription) - 1 < 0 THEN 1 ELSE 
LEN(StockDescription) - CHARINDEX(',', StockDescription) - 1 END))) as 
'Knife Model'

,CASE WHEN LAG(OperCompleted) OVER (PARTITION BY WJAL2.Job Order By 
WJAL2.Operation) IS NULL THEN 'Y' ELSE LAG(OperCompleted) OVER (PARTITION BY 
WJAL2.Job Order By WJAL2.Operation) END as PrevCompleted
,PrevFinishDate
,PrevOperation
,PrevWorkCentre
,InspectionSpecification_No
,InspectionSpecification_type
,Status
From (Select Job
        ,Operation
        ,IExpUnitRunTim
        ,ParentQtyPlanEnt
        ,OperCompleted
        ,QtyCompleted
        ,QtyScrapped
        ,WorkCentre
        ,ActualFinishDate
        ,LAG(ActualFinishDate) OVER (PARTITION BY Job Order By Operation) as 
PrevFinishDate
        ,LAG(Operation) OVER (PARTITION BY Job Order By Operation) as 
PrevOperation
        ,LAG(WorkCentre) OVER (PARTITION BY Job Order By Operation) as 
PrevWorkCentre
    From CompanyH.dbo.WipJobAllLab) WJAL2
Join CompanyH.dbo.WipMaster t5
On WJAL2.Job = t5.Job
LEFT Join [uniPoint_CompanyH].[dbo].[PT_InspectionSpecification] t6
On t5.StockCode = t6.Part COLLATE Latin1_General_BIN
WHERE WorkCentre = 'INSPCT' and OperCompleted = 'N' and Complete = 'N'  and 
t6.InspectionSpecification_No is NULL
sql-server union collation
1个回答
0
投票

第一个错误很明显 - 这是工会的一个问题。

请记住,union也会删除重复项,这意味着它必须将第一个查询中的每个元素与第二个查询中的每个元素进行比较。因此,正如其中一条评论所述,在外部表中的所有varchar列的选择列表中添加collat​​e修饰符,以及显式比较。

第二个问题可能是由同一件事引起的 - 当它试图在结合期间将结果集1与结果集2进行比较时,如果第一个是int,第二个是varchar,而第二个不是数字,你将得到错误。

© www.soinside.com 2019 - 2024. All rights reserved.