我正在尝试跨2个数据库创建连接(版本2012 sp1):
SELECT *
FROM dbo.User w
INNER JOIN db1.dbo.UserAccounts mu ON mu.Email = w.email
但是
无法解决之间的排序规则冲突 “SQL_Latin1_General_CP1_CI_AS”和“Latin1_General_CI_AS”在平等 操作。
此片段MS documentation says,此片段将更新这两个数据库,以便它们使用相同的排序规则类型:
USE master;
GO
ALTER DATABASE db1
COLLATE Latin1_General_CI_AS ;
GO
ALTER DATABASE db2
COLLATE Latin1_General_CI_AS ;
GO
我可以发出没有错误的命令
--Verify the collation setting.
SELECT name, collation_name
FROM sys.databases
WHERE name = N'db2' OR name = 'db1';
并看到:
db1 Latin1_General_CI_AS
db2 Latin1_General_CI_AS
但是在我的联接尝试中仍然会出现与排序“更改”之前相同的错误。
答案 0 :(得分:1)
试试这个
更改数据库归类
此示例显示如何在ALTER DATABASE语句中使用COLLATE子句来更改排序规则名称。执行SELECT语句以验证更改。
USE master;
GO
ALTER DATABASE MyOptionsTest
COLLATE French_CI_AS ;
GO
--Verify the collation setting.
SELECT name, collation_name
FROM sys.databases
WHERE name = N'MyOptionsTest';
GO
答案 1 :(得分:1)
列级别上定义的排序规则优先于数据库排序规则,查询级别中使用的排序规则优先于列级别排序规则。
在您的情况下,您已更改了数据库默认排序规则,但如果存在具有不同排序规则的列,则不会对其产生影响。
您需要在查询中使用显式排序规则......
SELECT *
FROM dbo.User w INNER JOIN db1.dbo.UserAccounts mu
ON ON mu.Email = w.email COLLATE database_default