Schema Compare 和 SqlPackage 150 区分大小写问题
Schema Compare and SqlPackage 150 case sensitivity issues
所以我安装了新的 SqlPackage 150 (之前有 140 个没有问题) 并部署了两次数据库 (sqlpackage 是一个开玩笑,这两次需要在任何更新上完成,以查看它在更改未触及的代码时有什么新的怪癖),我注意到它正在改变功能,即使实际代码没有发生变化。之前在使用 SqlPackage 时遇到过麻烦,而且它的比较方法设计得很糟糕,我学会了解决它们:
- 不要使用
iif
,使用case
- 将整个
case when then
... end
放在一行中,无论它有多长
- 始终用括号括起来(默认值)和(计算字段)
- 命名所有约束(pks、唯一性、检查)
今天有新发现。我所有的 sql 代码都是小写的,所有的名字都被引用 [name]
,所以它很干净,就像:create function [dbo].[fnFunction1](...)
。但是新的 SqlPackage 决定改变 ALL 我的功能。不是过程,不是表,不是视图,不是触发器,即使它们都是小写的 create *
。我尝试发布 3 次,同样的事情。始终只更改功能。
所以我运行Schema Compare
看看是什么问题。这就是我之前通过反复试验发现我之前列出的 sqlpackage 的怪癖的方式。我查看了差异,始终只有一个差异:
- 本地代码有
create function ...
- 远程代码有
CREATE function ...
Yes, I do have Ignore keyword casing
checked in Schema Compare options and in the Publish Profile in the SSDT Project. It seems to be irrelevant in functions.
大小写的不同导致函数被改变但没有别的,即使我总是使用 (并且一直使用) create
小写。所以远程它想要 CREATE function
而本地它有 create function
。虽然 create table\view\procedure\trigger\index\...
很酷。
这里发生了什么?我真的不想更改函数外壳,也不想在每次发布时都更改,也不想恢复到 SqlPackage 140。
Issue did not happen using SqlPackage140 with SqlServer 2019 but occurs on SqlPackage150 with SqlServer 2019.
此行为已通过 the latest SQLpackage 修复。但是它没有自动更新,我必须自己手动更新。
[编辑] 写了一个 PowerShell script to auto-update 所以我可以 运行 它时不时地为我工作。 (我是 PS 的新手,所以......它可能不好,但它有效。)
所以我安装了新的 SqlPackage 150 (之前有 140 个没有问题) 并部署了两次数据库 (sqlpackage 是一个开玩笑,这两次需要在任何更新上完成,以查看它在更改未触及的代码时有什么新的怪癖),我注意到它正在改变功能,即使实际代码没有发生变化。之前在使用 SqlPackage 时遇到过麻烦,而且它的比较方法设计得很糟糕,我学会了解决它们:
- 不要使用
iif
,使用case
- 将整个
case when then
...end
放在一行中,无论它有多长 - 始终用括号括起来(默认值)和(计算字段)
- 命名所有约束(pks、唯一性、检查)
今天有新发现。我所有的 sql 代码都是小写的,所有的名字都被引用 [name]
,所以它很干净,就像:create function [dbo].[fnFunction1](...)
。但是新的 SqlPackage 决定改变 ALL 我的功能。不是过程,不是表,不是视图,不是触发器,即使它们都是小写的 create *
。我尝试发布 3 次,同样的事情。始终只更改功能。
所以我运行Schema Compare
看看是什么问题。这就是我之前通过反复试验发现我之前列出的 sqlpackage 的怪癖的方式。我查看了差异,始终只有一个差异:
- 本地代码有
create function ...
- 远程代码有
CREATE function ...
Yes, I do have
Ignore keyword casing
checked in Schema Compare options and in the Publish Profile in the SSDT Project. It seems to be irrelevant in functions.
大小写的不同导致函数被改变但没有别的,即使我总是使用 (并且一直使用) create
小写。所以远程它想要 CREATE function
而本地它有 create function
。虽然 create table\view\procedure\trigger\index\...
很酷。
这里发生了什么?我真的不想更改函数外壳,也不想在每次发布时都更改,也不想恢复到 SqlPackage 140。
Issue did not happen using SqlPackage140 with SqlServer 2019 but occurs on SqlPackage150 with SqlServer 2019.
此行为已通过 the latest SQLpackage 修复。但是它没有自动更新,我必须自己手动更新。
[编辑] 写了一个 PowerShell script to auto-update 所以我可以 运行 它时不时地为我工作。 (我是 PS 的新手,所以......它可能不好,但它有效。)