更改现有数据库的排序规则类型

时间:2014-02-09 13:09:23

标签: sql-server

我正在尝试跨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

但是在我的联接尝试中仍然会出现与排序“更改”之前相同的错误。

2 个答案:

答案 0 :(得分:1)

试试这个

  

更改数据库归类

  1. 连接到数据库引擎。
  2. 在标准栏中,点击新建查询。
  3. 将以下示例复制并粘贴到查询窗口中,然后单击 执行。
  4. 此示例显示如何在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
    

    Change the Database Collation

答案 1 :(得分:1)

列级别上定义的排序规则优先于数据库排序规则,查询级别中使用的排序规则优先于列级别排序规则。

在您的情况下,您已更改了数据库默认排序规则,但如果存在具有不同排序规则的列,则不会对其产生影响。

您需要在查询中使用显式排序规则......

SELECT *
FROM dbo.User w INNER JOIN db1.dbo.UserAccounts mu
ON ON mu.Email = w.email COLLATE database_default