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

时间:2016-10-12 11:07:18

标签: visual-studio-2015 sql-server-data-tools sqlproj

我将数据库导入.sqlproj,并发布.publish.xml发布配置文件,将更改发布到远程数据库。

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

这一切似乎都运行正常,但是,它生成的脚本总是包含ALTER FUNCTIONALTER PROCEDURE语句,用于相同的40个左右的函数和过程(总共大约1000个定义), 是否已更改。当我将ALTER语句与脚本函数进行比较时 - > ALTER在SSMS中编写脚本,它们完全相同。

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

注意:

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

由于

1 个答案:

答案 0 :(得分:0)

<强>更新

通过将.dacpac重命名为.zip并解压缩model.xml,我可以看到某些程序的<HeaderContents>中包含&#xA;(LF - 换行符)。

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

<强>原始

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

SET @doesnt_work = 
'FOO
BAR'

可以替换为

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

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