似乎SSDT没有发布列COLLATION,即使它在比较过程中检测到更改。
如果您更改表中特定列的列COLLATION并尝试发布更改,则会出现问题,SSDT会在创建发布脚本时忽略它。
这是在很久以前检测到的msdn forums上描述的类似问题,仍然可以复制。
我一直在使用SSDT版本14.0.60629.0 SSDT是否仍然存在此问题,或者是否存在有效的解决方法?
更新的
此问题仅适用于使用用户定义数据类型的列。
更新的
(添加了重现和更正问题文本的步骤):
重现步骤:
1.从数据库开始并记下排序规则
(这是我拥有的,我的开发服务器上的数据库):
目前的COLLATION设置是:
2.然后更改数据库归类。
USE master;
ALTER DATABASE [<db_name>] COLLATE SQL_Latin1_General_CP1250_CS_AS
新的COLLATION设置将是:
以前的列排序规则(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]);
答案 0 :(得分:1)
确保在发布设置中启用“脚本数据库排序规则”(选项卡:常规)
来源:https://dba.stackexchange.com/questions/128002/ssdt-publish-window-what-does-checkbox-enable-mean
然后它可能需要多个出版物
首先它在数据库级别上,稍后在表/列级别上