gpt4 book ai didi

sql-server - SSDT 不发布列 COLLATION 更改

转载 作者:行者123 更新时间:2023-12-04 03:17:38 25 4
gpt4 key购买 nike

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

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

这是在 msdn forums 上描述的类似问题, 很久以前检测到的,现在还在转载。

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


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

重现步骤:

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 比较机制将无法检测到任何更改。

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

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

最佳答案

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

那么它可能需要多次发布
首先它在数据库级别执行,然后在表/列级别执行

关于sql-server - SSDT 不发布列 COLLATION 更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39899927/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com