SSDT不会发布列COLLATION更改

时间:2016-10-06 15:23:14

标签: sql-server sql-server-data-tools

似乎SSDT没有发布列COLLATION,即使它在比较过程中检测到更改。

如果您更改表中特定列的列COLLATION并尝试发布更改,则会出现问题,SSDT会在创建发布脚本时忽略它。

这是在很久以前检测到的msdn forums上描述的类似问题,仍然可以复制。

我一直在使用SSDT版本14.0.60629.0 SSDT是否仍然存在此问题,或者是否存在有效的解决方法?


更新的 此问题仅适用于使用用户定义数据类型的列。
更新的  (添加了重现和更正问题文本的步骤):

重现步骤:

1.从数据库开始并记下排序规则
(这是我拥有的,我的开发服务器上的数据库):

目前的COLLATION设置是:

  • 服务器
    SQL_Latin1_General_CP1_CI_AS
  • 数据库
    SQL_Latin1_General_CP1_CI_AS

  • SQL_Latin1_General_CP1_CI_AS
  • 用户定义的数据类型(dt_Source AS varchar(20))
    SQL_Latin1_General_CP1_CI_AS
  • 列(源AS dt_source)
    SQL_Latin1_General_CP1_CI_AS

2.然后更改数据库归类。

USE master;
ALTER DATABASE [<db_name>] COLLATE SQL_Latin1_General_CP1250_CS_AS



新的COLLATION设置将是:

  • 服务器
    SQL_Latin1_General_CP1_CI_AS
  • 数据库
    SQL_Latin1_General_CP1250_CS_AS

  • SQL_Latin1_General_CP1250_CS_AS
  • 用户定义的数据类型(dt_Source AS varchar(20))
    SQL_Latin1_General_CP1250_CS_AS
  • 列(源AS dt_source)
    SQL_Latin1_General_CP1_CI_AS

以前的列排序规则(SQL_Latin1_General_CP1_CI_AS)将保留,并且SSDT Compare机制将无法检测到任何更改。

如果我尝试在此列上创建外键约束,在另一个表中引用另一个新填充的列,这将导致错误消息,因为在不知道真正的排序规则的情况下构建了来自比较的发布脚本。登记/> 例如,这会产生错误,因为列排序规则不同:

ALTER TABLE [FCT].[Inventory] WITH NOCHECK
ADD CONSTRAINT [FK_Inventory_Source] FOREIGN KEY ([Source]) REFERENCES [DIM].[Source] ([SourceCode]);

1 个答案:

答案 0 :(得分:1)

确保在发布设置中启用“脚本数据库排序规则”(选项卡:常规)
来源:https://dba.stackexchange.com/questions/128002/ssdt-publish-window-what-does-checkbox-enable-mean

然后它可能需要多个出版物
首先它在数据库级别上,稍后在表/列级别上