问题描述
使用ms sql server,迁移从各种表中提取数据的查询。 没有 joins ,只有 union all 。
它仍然给我错误,即使我明确尝试使用相同的 collate 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