如何解决 join 和 union 中的 table 归类不匹配问题
How resolve table collation mismatch problems in join and union
在使用 Table1 和 Table2 或 Table3 表时,我收到以下错误
Microsoft SQL: 无法解决“SQL_Latin1_General_CP1_CI_AS”和“[=18=”之间的排序规则冲突]Latin1_General_CI_AS" 在 UNION ALL 运算符中用于 DISTINCT 操作。
DataBase Collation is SQL_Latin1_General_CP1_CI_AS
Table1 Collation is SQL_Latin1_General_CP1_CI_AS
Table2 Collation is SQL_Latin1_General_CP1_CI_AS
Table3 Collation is SQL_Latin1_General_CP1_CI_AS
SELECT
b.[BudgetID]
,b.[Budget]
,b.[BudgetType]
,b.[BudgetStatus]
,b.[BudgetStartDate]
,b.[BudgetEndDate]
,b.[ActualStartDate]
,b.[ActualEndDate]
,b.[PlannedBudget]
,b.[ActualSpend]
,b.[ProductLineName]
,b.[ProductLineKey]
,b.[ProductName]
,b.[ProductKey]
,b.[PlannedLeads]
,b.[ActualLeads]
FROM [dbo].[Table1]b
inner join [dbo].[Table2] c on c.budgetName = b.productlinename
inner join [dbo].[Table3] p on p.productline = b.productlinename
无法解决等于操作中 "SQL_Latin1_General_CP1_CI_AS" 和 "Latin1_General_CI_AS" 之间的排序规则冲突。
只需在等于操作中添加 COLLATE DATABASE_DEFAULT 即可。排序规则可以不同,不仅在数据库级别,而且在列级别。这可能就是这里发生的事情。
像这样将 COLLATE
添加到 JOIN 语法中
FROM [dbo].[Table1]b
inner join [dbo].[Table2] c on c.budgetName COLLATE SQL_Latin1_General_CP1_CI_AS = b.productlinename COLLATE SQL_Latin1_General_CP1_CI_AS
inner join [dbo].[Table3] p on p.productline COLLATE SQL_Latin1_General_CP1_CI_AS = b.productlinename COLLATE SQL_Latin1_General_CP1_CI_AS
在使用 Table1 和 Table2 或 Table3 表时,我收到以下错误
Microsoft SQL: 无法解决“SQL_Latin1_General_CP1_CI_AS”和“[=18=”之间的排序规则冲突]Latin1_General_CI_AS" 在 UNION ALL 运算符中用于 DISTINCT 操作。
DataBase Collation is SQL_Latin1_General_CP1_CI_AS
Table1 Collation is SQL_Latin1_General_CP1_CI_AS
Table2 Collation is SQL_Latin1_General_CP1_CI_AS
Table3 Collation is SQL_Latin1_General_CP1_CI_AS
SELECT
b.[BudgetID]
,b.[Budget]
,b.[BudgetType]
,b.[BudgetStatus]
,b.[BudgetStartDate]
,b.[BudgetEndDate]
,b.[ActualStartDate]
,b.[ActualEndDate]
,b.[PlannedBudget]
,b.[ActualSpend]
,b.[ProductLineName]
,b.[ProductLineKey]
,b.[ProductName]
,b.[ProductKey]
,b.[PlannedLeads]
,b.[ActualLeads]
FROM [dbo].[Table1]b
inner join [dbo].[Table2] c on c.budgetName = b.productlinename
inner join [dbo].[Table3] p on p.productline = b.productlinename
无法解决等于操作中 "SQL_Latin1_General_CP1_CI_AS" 和 "Latin1_General_CI_AS" 之间的排序规则冲突。
只需在等于操作中添加 COLLATE DATABASE_DEFAULT 即可。排序规则可以不同,不仅在数据库级别,而且在列级别。这可能就是这里发生的事情。
像这样将 COLLATE
添加到 JOIN 语法中
FROM [dbo].[Table1]b
inner join [dbo].[Table2] c on c.budgetName COLLATE SQL_Latin1_General_CP1_CI_AS = b.productlinename COLLATE SQL_Latin1_General_CP1_CI_AS
inner join [dbo].[Table3] p on p.productline COLLATE SQL_Latin1_General_CP1_CI_AS = b.productlinename COLLATE SQL_Latin1_General_CP1_CI_AS