仅在联合中整理“sql_latin”和“latin1”不匹配冲突 - 如何解决?

问题描述

使用ms sql server,迁移从各种表中提取数据的查询。 没有 joins ,只有 union all 。

它仍然给我错误,即使我明确尝试使用相同的 collat​​e std - 两者都不起作用。

"无法解决间的排序规则冲突 UNION ALL 中的“sql_latin1_General_CP1_CI_AS”和“latin1_General_CI_AS” SELECT 语句第 2 列中出现的运算符。

SELECT PHonetype_PHK AS  [ID],PhoneTypeCode                            AS Code,PhoneTypeName                            AS Caption,'PhoneType'  COLLATE DATABASE_DEFAULT AS PSWSEnumType,--COLLATE sql_latin1_General_CP1_CI_AS AS PSWSEnumType,--COLLATE latin1_general_ci_as AS PSWSEnumType,GETDATE() AS [DFLastDateTime]
  FROM   DWH.DimPhoneType 

  UNION ALL 

  SELECT [ID],WorkScheduleCode                            AS Code,WorkScheduleName                            AS Caption,'WorkSchedule' COLLATE DATABASE_DEFAULT AS PSWSEnumType,-- AS PSWSEnumType,COLLATE DATABASE_DEFAULT
         GETDATE() AS [DFLastDateTime]
  FROM   DWH.DimWorkSchedule 


  UNION ALL 

  SELECT 'S','S'                                       AS Code,'Contractor'                              AS Caption,'SearchType' AS PSWSEnumType,--COLLATE latin1_General_CI_AS AS PSWSEnumType,GETDATE() AS [DFLastDateTime]

问题来自表 DimWorkSchedule - 它有不同的整理标准。

解决方法

问题来自dimwork schedule中的3列

这向我展示了整理标准,第一个 ID 列有一个差异。

select col.collation_name  FROM SYS.columns   col WHERE   object_id = OBJECT_ID('DWH.DimWorkSchedule')

这是最终查询,我整理了所有这些:

SELECT [ID]                  COLLATE SQL_Latin1_General_CP1_CI_AS                        AS ID,WorkScheduleCode      COLLATE SQL_Latin1_General_CP1_CI_AS                      AS Code,WorkScheduleName      COLLATE SQL_Latin1_General_CP1_CI_AS                      AS Caption,'WorkSchedule'                             COLLATE SQL_Latin1_General_CP1_CI_AS AS PSWSEnumType,-- AS PSWSEnumType,--COLLATE latin1_general_ci_as AS PSWSEnumType,COLLATE DATABASE_DEFAULT
         GETDATE() AS [DFLastDateTime]
  FROM   DWH.DimWorkSchedule