排序规则冲突...无法使用 dbo.sysdac_instances

YaH*_*zna 6 sql-server collation restore msdb sql-server-2014

将数据库迁移到具有默认排序规则 Latin1_General_CI_AS 的新 2014 服务器后,但在大多数数据库的排序规则为 Latin1_General_BIN 的情况下,尝试导入 Excel 电子表格会引发以下错误:

排序规则冲突错误消息

我已经将 sysdac_instances 跟踪到 msdb,它是一个系统视图,直接查询它会给出相同的错误。我希望有人能够指出我对这个问题的直接解决方案的方向?

奇怪的是,通过 SSMS 2008 运行导入是有效的。

Han*_*non 7

sysdac_instances视图被定义为如下:

CREATE VIEW [dbo].[sysdac_instances]
AS
    SELECT
        -- this must be locked down because we use instance_id visability as a security gate
        case 
            when (dbo.fn_sysdac_is_currentuser_sa() = 1) then dac_instances.instance_id
            when sd.owner_sid = SUSER_SID() then dac_instances.instance_id
            else NULL
        end as instance_id,
        dac_instances.instance_name,
        dac_instances.type_name,
        dac_instances.type_version,
        dac_instances.description,
        case 
            when (dbo.fn_sysdac_is_currentuser_sa() = 1) then dac_instances.type_stream
            when sd.owner_sid = SUSER_SID() then dac_instances.type_stream
            else NULL
        end as type_stream,
        dac_instances.date_created,
        dac_instances.created_by,
        dac_instances.instance_name as database_name
    FROM sysdac_instances_internal dac_instances
    LEFT JOIN sys.databases sd
        ON dac_instances.instance_name = sd.name
Run Code Online (Sandbox Code Playgroud)

视图instance_namesys.databases.name列执行连接。由于 的列定义sysdac_instances_internal.instance_name未指定排序规则,因此它将采用 msdb 数据库的排序规则。

也许您从排序规则为 的实例中恢复了 msdb Latin1_General_BIN,这会导致排序规则冲突。如果这种情况,您需要重新创建 MSDB 数据库,因为它的排序规则不能被改变