1

我有一个导入到 中的数据库.sqlproj,以及一个.publish.xml将更改发布到远程数据库的发布配置文件。

我的理解是,当我右键单击-> 发布-> 生成脚本时,它应该计算本地定义和远程数据库之间的差异,并生成一个脚本以使远程数据库符合要求。

这一切似乎都可以正常工作,但是,它生成的脚本总是包含相同的 40 个左右的函数ALTER FUNCTIONALTER PROCEDURE过程的语句(总共定义了大约 1000 个),无论它们是否已更改。当我将ALTER语句与 Script Function as -> ALTER to script in SSMS 进行比较时,它们完全相同。

所以我的问题是:为什么 VS 认为这些是不同的,或者如果它们相同,为什么它会重新创建它们?

笔记:

  • 这些函数并不特殊 - 其中一些就像定义一个 varchar 一样简单,将其设置为一个值并返回它。
  • 我已经尝试将ALTER脚本运行到数据库中,但它们会继续生成。
  • 我已经检查了 SSMS 中的属性(右键单击-> 属性),但看不到它总是重新创建的那些和它不重新创建的那些明显不同的任何东西。
  • 我的发布配置文件是沼泽标准配置文件。

谢谢

4

2 回答 2

1

我遇到了这个问题,并且能够通过以下方式解决它:

  1. 更改我的全局 Git 配置以使用 Windows 行尾:
    git config --global core.autocrlf true.

  2. 删除本地仓库并重新克隆它。

于 2021-09-30T16:16:04.047 回答
0

更新:

通过将 .dacpac 重命名为 .zip 并提取 model.xml,我可以看到其中<HeaderContents>的一些程序&#xA;(LF - 换行符)。

这让我意识到,出于某种原因,我所有的 .SQL 文件都有 unix 行尾 (LF) 而不是 windows 行尾 (CR LF)。将所有文件转换为窗口行尾(使用记事本++)解决了这个问题。

原来的:

好的,看起来大多数是由于脚本中的字符串常量包含换行符。用手动定义的字符替换它们意味着它们不再被重新部署。IE

SET @doesnt_work = 
'FOO
BAR'

可以替换为

SET @works = 'FOO'  + CHAR(13) + CHAR(10) + 'BAR'

注意:这更像是一种解决方法而不是解决方案,希望有人可以提出更好的方法来做到这一点......

于 2016-10-13T10:19:32.530 回答