SSDT 发布脚本无需更改即可重新创建过程

SSDT publish script recreates procedures with no changes

我有一个数据库导入到 .sqlproj,还有一个 .publish.xml 发布配置文件,用于将更改发布到远程数据库。

我的理解是,当我右击 -> 发布 -> 生成脚本时,它应该计算本地定义和远程数据库之间的差异,并生成一个脚本来使远程数据库保持一致。

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

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

备注:

谢谢

更新:

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

这让我意识到,出于某种原因,我所有的 .SQL 文件都有 unix 行结尾 (LF) 而不是 windows 行结尾 (CR LF)。将所有文件转换为 window 行结尾 (using notepad++) 解决了问题。

原文:

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

SET @doesnt_work = 
'FOO
BAR'

可以换成

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

注意:这与其说是解决方案,不如说是一种变通方法,希望有人可以提出更好的方法...

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

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

  2. 正在删除本地存储库并重新克隆它。