跨数据库联接归类问题

时间:2018-08-29 22:18:11

标签: sql-server union collation

此跨数据库连接存在问题。当我分别运行每个部分时(UNION之前/之后),它们运行得很好。但是,一旦联盟成立,我就会出错。

  

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

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

  

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

我尝试通过将字段投射为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

1 个答案:

答案 0 :(得分:0)

第一个错误非常清楚-这是工会的问题。

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

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