我将数据库导入.sqlproj
,并发布.publish.xml
发布配置文件,将更改发布到远程数据库。
我的理解是当我右键点击时 - >发布 - >生成脚本,它应该计算本地定义和远程数据库之间的差异,并生成一个脚本以使远程数据库排成一行。
这一切似乎都运行正常,但是,它生成的脚本总是包含ALTER FUNCTION
和ALTER PROCEDURE
语句,用于相同的40个左右的函数和过程(总共大约1000个定义), 是否已更改。当我将ALTER
语句与脚本函数进行比较时 - > ALTER在SSMS中编写脚本,它们完全相同。
所以我的问题是:为什么VS认为这些是不同的,或者为什么如果它们是相同的话它会重新创建它们呢?
注意:
ALTER
脚本运行到数据库中,但它们仍会继续生成。由于
答案 0 :(得分:0)
<强>更新强>
通过将.dacpac重命名为.zip并解压缩model.xml,我可以看到某些程序的<HeaderContents>
中包含

(LF - 换行符)。
这让我意识到由于某种原因,我的所有.SQL文件都有unix行结尾(LF)而不是windows行结尾(CR LF)。将所有文件转换为窗口行结尾(using notepad++)解决了这个问题。
<强>原始强>
好的,看起来大多数都是由于包含新行字符的脚本中的字符串常量造成的。用他们手动定义的字符替换它们意味着他们不再需要重新部署。 即。
SET @doesnt_work =
'FOO
BAR'
可以替换为
SET @works = 'FOO' + CHAR(13) + CHAR(10) + 'BAR'
注意:这更像是一种解决方法,而不是解决方案,希望有人能提出更好的方法来做到这一点...